ترفض NHibernate كثيرة الى واحد جمعية لتحميل
-
22-07-2019 - |
سؤال
ولدي التعيين التالية، الخاصية 'رسالة' العديد الى واحد لديها المقابلة واحد لكثير الجمعيات في الفئة 'RootMessage ".
<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>
والجمعية العديد الى واحد ترفض تحميل عند استخدام واجهة برمجة معايير (كل ما تحصل عليه هو NULL)، وهنا مثال استعلام:
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;
وأي أفكار؟
المحلول
وطيب حتى بعد ما يقرب من يوم واحد من الكدر لدي الحل. NHibernate لا تتحمل تلقائيا رابطة ثنائية الاتجاه بين كيانين <م> حتى إذا كان لديك تعيينات بين البلدين م>. تحتاج إلى إعلان حتما الجمعيات في التعليمات البرمجية قبل الاستمرار. وهكذا:
message.Receipts = receipts;
foreach (var receipt in receipts)
{
receipt.Message = message;
}
Session.Save(message);
tx.Commit();
وأيضا معكوس = "صحيح" يجب أن يطبق على الجانب مع عضو مجموعة:
<set name="Receipts" inverse="true" cascade="save-update">
<key column="MessageId"></key>
<one-to-many class="IMessageReceipt"/>
</set>
لا تنتمي إلى StackOverflow