سؤال

باستخدام Linq-to-SQL أرغب في جلب بعض البيانات مسبقًا.

1) الحل المشترك هو التعامل معها خيارات تحميل البيانات, ، ولكن في بنيتي لن يعمل ذلك للأسباب التالية:

  • يجب تعيين الخيارات قبل الاستعلام الأول
  • أنا أستخدم IOC، لذلك لا أقوم بإنشاء DataContext مباشرة (لا أستطيع تنفيذ التعليمات البرمجية عند الإنشاء)
  • يظل DataContext الخاص بي ثابتًا طوال مدة طلب الويب

2) لقد رأيت احتمالًا آخر بناءً على ذلك تحميل ال البيانات وأبنائها في إحدى الطرق، ثم يتم إرجاع البيانات فقط (بحيث يتم تحميل الطفل بالفعل) انظر مثالا هنا

ومع ذلك، في الهندسة المعمارية الخاصة بي، لا يمكن أن لا يعمل:

  • يتم إرسال استفساراتي إلى خارج مستودع التخزين الخاص بي ويمكن استهلاكها بواسطة العديد من الخدمات التي ستضيف عبارات
  • أنا أعمل مع الواجهات، والمثيلات الملموسة لكائنات linq-to-sql لا تترك المستودعات (نعم، يمكنك العمل مع الواجهات وإضافة بنود)
  • مستودعاتي عامة

نعم، هذه البنية معقدة للغاية، ولكنها رائعة جدًا حيث يمكنني اللعب برمز مثل الليغو ;)

سؤالي هو :ما هي احتمالات أخرى لجلب البيانات مسبقا؟

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

المحلول

ربما أستخدم في تطبيقي شكلاً مختلفًا للحل المحتمل رقم 2.من الصعب إلى حد ما شرح ذلك ولكن ببساطة:أقوم بتسلسل وتأجيل التحميل البطيء في النموذج الخاص بي مع التخصيص فصول كسول وذلك للابتعاد عن التنفيذ المختلف الخاص بـ LinqToSql والذي أستفيد منه IQueryable.فوائد:

  • ليس من الضروري أن يعتمد نموذج المجال الخاص بي وطبقة الخدمة للأعلى على موفر LinqToSql (يمكنني تبديل DAL الخاص بي بالواجهات إذا أردت ذلك)
  • يمكن لأساليب الخدمة الخاصة بي أن تقوم بإرجاع رسوم بيانية كاملة للكائنات مع "نقاط ربط" متعددة للتحميل البطيء باستخدام الفئات التي تلخص تنفيذ تحميل بطيء معين - حتى أتمكن من استخدام التنفيذ المختلف الخاص بـ LinqToSql أو أي شيء آخر (على سبيل المثال.مندوبين حالين.مرة أخرى، راجع هذه الإجابة)
  • أستطيع الحفاظ على IQueryable النتائج في جميع أنحاء تطبيقي (حتى إلى واجهة المستخدم إذا أردت ذلك) مما يسمح بتسلسل استعلام LINQ غير المحدود دون الحاجة إلى القلق بشأن الأداء.

نصائح أخرى

لست على علم بالإحتمالات الأخرى، يبدو أنك قد دفعت LinqToSql إلى أقصى حدوده (ومع ذلك، قد أكون مخطئًا).

أعتقد أن أفضل الخيارات المتاحة أمامك في هذه المرحلة هي:

  1. أضف بعض الأساليب "غير العامة" إلى تطبيقك للتعامل مع السيناريوهات المحددة التي تريد/تحتاج إلى تحميل متلهف ولا تستخدم البنية التحتية "العادية" ، "العامة" لتلك الأساليب.
  2. استخدم ORM الذي يتمتع بدعم أكثر تعقيدًا للتحميل المتحمس والكسول.

لقد وجدت الحل.اجابتي هي 'حقن التبعية'.

يتم شحنها بشكل عام مع IOC، وهذا يعني أنه يمكنك جعل حاوية IOC الخاصة بك تدير حقن الفئات في الإنشاء.

كل ما أحتاجه هو حقن أ CustomDCParameter الطبقة عندما أقوم بإنشاء DC.ستحتوي هذه الفئة على القواعد، وسيقوم المُنشئ بتطبيقها جميعًا.

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