سؤال

أرغب في إنشاء نهج أكثر تنظيما لتحميل شجرة الكيان الماستية:

أحتاج إلى كمية جادة من البيانات، لذلك أفعل ذلك باستخدام نوع الآمن يتضمن (فقط تشمل عادي ولكن مع Lambda) كما هو مبين هنا.

كما قلت، أحتاج إلى الكثير من البيانات، أساسا شجرة كيان كاملة تحت 1 عنصر الوالدين.

الآن، يمكنني أن أفعل هذا يفعل شيئا مثل:

context.House
    .Include(x => x.Doors)
    .Include(x => x.Doors.FirstOrDefault().Joint)
    .Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory)
    .Include(x => x.Doors.FirstOrDefault().Joint.FirstOrDefault().JointCategory.JointType)
    .Include(x => x.Windows)
    // ... same thing
    .Include(x => x.Roof)
    // ... same thing

كما ترون، يمكن أن يحصل هذا الخط المليء بالضمان كبيرا. هذا في الواقع عينة مبسطة للغاية من الكود الفعلي (والتي لا تشمل المنازل BTW)

إذن ما أود القيام به هو خلق أساليب، مسؤولة عن فرعها في الشجرة. حيث يمكن للطريقة أن تقبل استعلام الكائنات وتضمين الطفل، وفي دورها، اتصل ب "طرق لودر الطفل". أيضا، يجب ألا يهم الوالد، طالما أن لديه خاصية مع نوع الطفل.

هذا ربما لا معنى له الكثير:

public void LoadHouse(int id)
{
    // ...
    ObjectQuery<House> query = context.House;

    // and now?
    LoadDoors(query, x => x.Door);

}

public void LoadDoors<T>(ObjectQuery<T> query, ..?..)
{
    // ... ?

    LoadJoints(...)


}

وهلم جرا. لكنني لا أستطيع حقا الحصول على رأسي حولها ... هناك ارتباط مفقود بين الاستعلام الوارد واتصل بطرق الطفل.

لقد فعلت كل شيء من هذا القبيل؟ أو يمكن لأي شخص أن يعطيني بعض المؤشرات؟

هل كانت مفيدة؟

المحلول

جرب شيئا مثل هذا بدلا من ذلك:

استعلام = loaddoors (الاستعلام، x => x.door)؛

حيث إرجاع LoadX نتيجة الاتصال تتضمن.

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