كيفية تنظيم نموذج مستودع أثناء استخدام الكيان الإطار ؟

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

سؤال

لدي معضلة حول كيفية تنظيم الاتصال (مستودع الدرجة) إلى طبقة البيانات في التطبيق الذي يستخدم إطار الكيان.

كيف تكتب ؟ و لماذا ؟

public class ResearchRepository
{
    public Research GetResearch (int id)
    {
        using (MnijenjeEntities mnijenjeContext = new MnijenjeEntities())
        {
            ObjectQuery<Research> researchs = mnijenjeContext.Research;

            var research = (from r in researchs.Include("SurveyPaper")
                            where r.ResearchID == id
                            select r).First();
            return research;
        }
    } //....

أو

public class ResearchRepository
{
    private MnijenjeEntities mnijenjeContext;

    public Research GetResearch(int id)
    {
         mnijenjeContext = new MnijenjeEntities();

         ObjectQuery<Research> researchs = mnijenjeContext.Research;

         var research = (from r in researchs.Include("SurveyPaper")
                         where r.ResearchID == id
                         select r).First();
         return research;
    } //....

الفرق هو في dataContext وجوه الاستعمال.

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

المحلول

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

  • استخدام عدة ObjectContexts لنفس العملية هو إلى حد كبير أكثر صعوبة من استخدام واحد ObjectContext في عملية واحدة.
  • ابقاء ObjectContext حول لفترة طويلة يمكن أن تستهلك الكثير من الذاكرة, وربما غيرها من الآثار الجانبية غير المرغوب فيها.
  • على ObjectContext نفسها لديها بعض "خفيفة الصفقة" الميزات ، وهي التي تتراكم التغييرات يمكن تطبيقها في كل مرة ، ، إلى حد ما ، معزولة عن التغييرات في سياقات أخرى.

لذلك, أميل إلى محاولة استخدام أحد ObjectContext في وحدة العمل ، والتخلص من السياق عند وحدة العمل كاملة.لأن وحدة العمل يمكن أن تنطوي على عدة مستودعات أنا مثيل فئة خدمة مما يخلق ObjectContext يمكن أيضا العودة مستودعات.عندما أطلب الخدمة مستودع ، بحقن ObjectContext قبل العودة مثيل جديد.التخلص الخدمة يتصرف في سياق جميع مستودعات في آن واحد.

يمكنني استخدام خدمة واحدة مثلا في وحدة العمل.في حالتي أنا أفعل ASP.NET MVC, حتى وحدة العمل هو رد على طلب واحد.

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