سؤال

ومراجعة واجهة Conery ل، وأنا لا أفهم لماذا اعتاد الطبقات الذي تم إنشاؤه تلقائيا Linqs (أي ترتيب الدرجة) ومن ثم لديه الدرجة بالدفع أخرى عرفت أن ليس فئة جزئية. عند استخدام نمط مستودع ينبغي للمرء أن يدويا إنشاء فئات، وتجاهل Datacontext تماما؟

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

المحلول

إذا كنت لا فصل الأمامية الخاصة بك من الطبقات LINQ استخدام طبقة وسيطة، لا يمكنك التحكم مع سياق البيانات يحصل القمامة التي تم جمعها. عادة بأنواع سياق البيانات من الحالات التي تريد التخلص منها بمجرد الانتهاء من ذلك استخدامها. وإليك كيف قد ترغب في القيام بذلك مع LINQ إلى SQL السياق:

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    return thing;
}
... the MyDataContext instance is gone

ومع "باستخدام" كتلة، كنت التخلص من مثيل MYDataContext في الماضي "}". ومع ذلك، إذا قمت بذلك سوف تحصل على خطأ ثم تحاول استخدام "الشيء" بسبب ذهابه المثال سياق البيانات. إذا كنت <م> لا التخلص من سياق البيانات، تبقى هو التسكع حتى انها في نهاية المطاف القمامة التي تم جمعها.

إذا كنت أعرض طبقة وسيطة لفصل في LINQ إلى رمز SQL من التطبيق الدعوة لا يزال بإمكانك التخلص من المثال السياق بياناتك وإرجاع نفس البيانات (فقط في كائن آخر):

using (MyDataContext data = new MyDataContext())
{
    SomeThing thing = data.Things(t => t.ID == 1);
    SometThingElse otherThing = ConvertSomethingToSomethingElse(thing);
    return otherThing;
}
... the MyDataContext instance is gone

وعلى أمل أن يساعد.

نصائح أخرى

لقد أجاب روب بشأن هذه المسألة في واحدة من برنامجه.

ووعن طريق الطبقات POCO أن تكون على علم من جميع الطبقات dataaccess. على سبيل المثال عندما تغيير LINQ إلى SQL لNHibernate كل ما سوف تحتاج إلى القيام أغير له "تعيينات" في المرشحات له، وانه لن يلزم إجراء أية تغييرات في منطق تجارية (سابقا).

وقال في واحد من أشرطة الفيديو الأخيرة أنه لا يحب الطريقة التي LINQ إلى SQL يفعل رسم الخرائط. أوافق على الرغم من أنني أعتقد أنها مبالغة كاملة.

وأنا أقول كنت لا كسر أي أنماط التصميم الرئيسية طالما كنت التمسك نمط مستودع نفسها. اعتقد انها مسألة اختيار أن يكون 2 مجموعات من classesa، allbeit سيئة واحدة، لا تزال خيارا.

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