Frage

ich die folgende Abbildung habe, die viele-zu-eins-Eigenschaft ‚Nachricht‘ hat einen entsprechenden eine Eins-zu-viele-Verein in der ‚RootMessage‘ Klasse.

<class name="IMessageReceipt" lazy="false" table="MessageReceipts" abstract="true">

        <id name="Id">
            <generator class="guid.comb"></generator>
        </id>

        <discriminator column="Discriminator"/>
        <property name="Address" />
        <property name="Status" />
        <property name="MarkedAsDeleted" />

        <many-to-one name="Message" column="MessageId" class="RootMessage" 
                not-found="ignore"/>

        <subclass name="MessageReceipt" lazy="false" discriminator-value="1">
        </subclass>

    </class>

Das Viele-zu-Eins-Zuordnung weigert sich zu laden, wenn die Kriterien api verwenden (alles, was ich bekommen ist NULL), hier ist ein Beispiel für eine Abfrage:

            List<IMessageReceipt> list;
        using (var tx = Session.BeginTransaction())
        {
            var criteria = Session.CreateCriteria(typeof (IMessageReceipt));
            criteria.Add(Restrictions.Eq("Address", address));
            criteria.Add(Restrictions.Eq("Status", status));
            criteria.SetFirstResult(0);
            criteria.SetMaxResults(quantity);
            list = criteria.List<IMessageReceipt>().ToList();
            tx.Commit();
        }
        return list;

Irgendwelche Ideen?

War es hilfreich?

Lösung

Ok so nach fast einem Tag der Ärger habe ich die Lösung. NHibernate übernimmt nicht automatisch eine bidirektionale Verbindung zwischen zwei Entitäten auch wenn Sie Zuordnungen zwischen den beiden . Sie müssen unbedingt die Verbände im Code deklarieren, bevor persistierenden. Also:

message.Receipts = receipts;
foreach (var receipt in receipts)
{
   receipt.Message = message;
}
Session.Save(message);
tx.Commit();

Auch inverse = „true“ sollte mit dem Sammelelement auf der Seite angewandt werden:

<set name="Receipts" inverse="true" cascade="save-update">
<key column="MessageId"></key>
<one-to-many class="IMessageReceipt"/>
</set>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top