Frage

Ich habe eine grundlegende Kunde / Auftrag / OrderItem / Produktobjektgraph. Der Kunde hat viele Aufträge, Auftrag Viele Auftragspositionen hat, Produkt hat viele Auftragspositionen. Diese werden erfolgreich kartiert FNH werden.

Ich habe einen Haken bei der Konfiguration einer gespeicherten Prozedur und fließend-nhibernate getroffen. Es gibt keine native Möglichkeit gespeicherte Prozeduren in abzubilden fließend-winter FNH (Version 1.0 RTM). Es gab eine Lösung hier über Teile Klassenzuordnungen Hinzufügen aber der addpart Anruf wurde aus der Veröffentlichung von FNH genommen.

Die gespeicherte Prozedur ist einfach:

CREATE PROCEDURE [dbo].[OrderCountByCustomer] 
AS
BEGIN
    SET NOCOUNT ON;

    SELECT 
        c.name as [Customer.Name],
        CAST(count(o.id) as NVARCHAR) as [Customer.OrderCount]
    FROM customer c
        LEFT OUTER JOIN [order] o
        ON o.customer_id = c.id
    GROUP BY c.name

END

Es gibt eine CustomerOrderSummary.hbm.xml in

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NVAble.Orders.Core" namespace="NVAble.Orders.Core">
    <sql-query name="OrderSummary">
        <return class="CustomerOrderSummary">
            <return-property column="Customer.Name" name="CustomerName" />
            <return-property column="Customer.OrderCount" name="OrderCount" /> 
        </return>
        EXEC [OrderCountByCustomer]
    </sql-query>
</hibernate-mapping>

Hier ist die CustomerOrderSummary Klasse def:

namespace NVAble.Orders.Core
{
    public class CustomerOrderSummary
    {
        virtual public string CustomerName { get; set; }
        virtual public string OrderCount { get; set; }

        public override string ToString()
        {
            return string.Format("{0} {1}", CustomerName, OrderCount);
        }
    }
}

Wenn jedoch versuchen, eine NH-Sitzung starten i Fehlermeldung erhalten, in benannte Abfrage OrderSummary ohne weitere Details.

Ich bin wahrscheinlich etwas wirklich einfach fehlt, die die CustomerOrderSummary Klasse der Prozedur abbildet, weiß ich nicht. Das Domain-Objekt abbildet offensichtlich nicht direkt auf eine Tabelle in der Datenbank Ich bin so unsicher funktionieren würde ein normales <class /> HBM-Mapping, wenn mit?

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Ok, also nach etwas mehr Untersuchung. Ich brauchte eine Zuordnung für die Domain-Klasse sowie eine benannte Abfrage hbm.xml Datei.

In meiner configure Klasse ich habe

config.Mappings(x =>
{
    x.FluentMappings.AddFromAssemblyOf<CustomerMapping>().ExportTo(schemaPath);
    x.HbmMappings.AddFromAssemblyOf<CustomerOrderSummary>();
});

Die einzige Nachteil ist, dass ich das XML-Mapping für die gespeicherte Prozedur manuell erstellen, kann ich FNH nicht zum aktuellen Zeitpunkt verwenden

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top