ما هي البدائل لاستخدام التوسع في Query LINQ إلى ADO.NET Data Service؟

StackOverflow https://stackoverflow.com/questions/177520

سؤال

أتساءل عما إذا كان هناك أي بدائل لاستخدام كلمة "توسيع المفتاح" عند إجراء استعلام LINQ إلى ADO.NET Data Services. إن طريقة التوسيع تجعلني البيانات التي أهتم بها ، لكنها تتطلب مني أن أعرف جميع الكائنات الفرعية التي سأعمل معها مسبقًا. إن تفضيلي المطلق هو أن تلك الكائنات الفرعية سيتم تحميلها كسولًا بالنسبة لي عندما أصل إليها ، لكن هذا لا يبدو خيارًا (يمكنني إضافة هذا التحميل كسول إلى الحصول على تلك الخاصية الفرعية ، ولكنه لا يبدو ذلك يتم القضاء عليها عندما أقوم بتحديث مرجع خدمة البيانات).

هل لدى أي شخص أي اقتراحات/أفضل الممارسات/البدائل لهذا الموقف؟ شكرًا.

===== رمز مثال باستخدام العضو الذي يحتوي على mailingaddress ======

الأعمال:

var me = (from m in ctx.Member.Expand("MailingAddress")
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

يفضل (يرغب حقًا في ذلك إذا ذهب هذا وحمل Mailingaddress)

var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
MessageBox.Show(me.MailingAddress.Street);

أو على الأقل (ملاحظة: شيء مشابه لهذا ، مع MailingAddressReference ، يعمل على جانب الخادم إذا قمت بذلك كأوراق للكيانات في عملية الخدمة)

var me = (from m in ctx.Member
          where m.MemberID == 10000
          select m).First();
if (!(me.MailingAddress.IsLoaded())) me.MailingAddress.Load()
MessageBox.Show(me.MailingAddress.Street);
هل كانت مفيدة؟

المحلول

يبدو أن تحميل الكائنات الفرعية عبر خدمات بيانات ADO.NET لديها خياران:

تحميل حريصة

تم إنجازه بواسطة .expand ([MemberVariablename]) على مثال خدمات البيانات

var me = (from m in ctx.Member.Expand("MailingAddress")          
         where m.MemberID == 10000          
         select m).First();
MessageBox.Show(me.MailingAddress.Street);

تحميل كسول

تم إنجازه عن طريق الاتصال .LoadProperty على السياق وتمريره المتغير والخاصية التي يجب تحميلها كسول.

var me = (from m in ctx.Member          
          where m.MemberID == 10000          
          select m).First();
ctx.LoadProperty(myMember, "MailingAddresses");
MessageBox.Show(me.MailingAddress.Street);

نصائح أخرى

مع LINQ إلى الكيانات ، يمكنك أيضًا استخدام تشمل الطريقة. يمكنك تطبيق هذا لي بعد إعلانه ولكن قبل إعدامه ، على سبيل المثال:

me = me.Include("MailingAddress");
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top