استرجاع كائن وجمع الطفل في أحمق باستخدام LinQ
-
05-09-2019 - |
سؤال
لدي مشكلة في استخدام LinQ إلى NHIBERNATE لتحميل كائن قم بتحميل مجموعة أطفال بفارغ الصبر. الكائنات تبدو وكأنها هذه:
public class Order
{
public Guid Id {get; set; }
public IList<OrderLine> OrderLines {get;set;}
}
public class OrderLine
{
public Guid Id {get;set;}
public string Item {get;set;}
}
أحاول تحميل طلب مع معرف معين و (بفارغ الصبر) جميع طلبيات الطفل باستخدام LinQ. استعلمني يبدو وكأنه هذا:
using (var s = _sessionFactory.OpenSession())
using (var tx = s.BeginTransaction())
{
var order = from o in s.Linq<Order>().Expand("OrderLines")
where o.Id == id
select o;
return order.First();
}
ومع ذلك، عندما عرض النظام، OrderLines
يحتوي الممتلكات فقط على كائن واحد - قاعدة البيانات بالتأكيد 3. bizarrely، إذا كنت أفعل ذلك order
قبل العودة، أحصل على جميع العناصر الثلاثة للأطفال - ولكن هذا يضرب قاعدة البيانات مرتين.
لقد حاولت تعديل الاستعلام لاستخدامها Single()
بدلا من ذلك، ولكن هذا لا يعمل أيضا.
هل أفعل شيئا خطأ في لينك؟ أو هو استخدامي ل Expand
غير صحيح؟
شكرا مقدما،
سيمون.
ملاحظة: أنا أستخدم التدوين الفلنتينات إلى إنشاء تعيين NH الخاص بي، وقاعدة البيانات الخاصة بي قاعدة بيانات SQLite (ملف، وليس في الذاكرة).
المحلول
يبدو أن هذه الميزة لديها خطأ:
Firstordefault () فواصل fetchtype = انضم إلى LinQ إلى LIFORERNATE
إلقاء نظرة على استعلام قاعدة البيانات التي تم إنشاؤها، إذا كان لديها جملة واحدة أعلى، يمكن أن يكون هذا هو المشكلة.
تذكر أن LINQ إلى Lonhternate لا يزال بعيدا عن الإنتاج جاهز، لذلك يمكن أن يحدث هذا النوع من الأخطاء.