سؤال

لدي مشكلة في استخدام 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 لا يزال بعيدا عن الإنتاج جاهز، لذلك يمكن أن يحدث هذا النوع من الأخطاء.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top