كيفية تنفيذ نمط Unitofwork عند استخدام Subund 2.1 (نمط المستودع)؟

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

سؤال

أنا أستخدم نمط المستودع تحت الصوت (2.1) لتطبيق ASP.NET MVC. في طلبي ، هناك العديد من المستودعات مثل CatevoryRepository ، blogrepository إلخ. DB.Select().From()...ExecuteReader() ثم تحميل كائنات المجال من هؤلاء القارئ.

في إجراء وحدة التحكم ، أقوم بإجراء مكالمات متعددة من هذه المستودعات على سبيل المثال

List<IBlog> blogs=_blogRepository.GetHottestBlogs();

List<ICategory> categories=_categoryRepository.GetAll();

هل يجب علي تنفيذ أي نمط وحدة Unitofwork لهذا؟ TransactionScope يكفي لتحديث الدُفعات أو يجب أن أستخدمه SharedDbConnectionScope للحصول على أداء أفضل؟

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

المحلول

مع Subsong ، يجب عليك الجمع بين TransactionsCope و SerqueDBConnectionsCope. وإلا فإن كل أمر سيستخدم اتصاله المخصص الخاص به والذي يتم التخلص منه بعد التنفيذ ، مما سيؤدي إلى التزام ضمني (على الأقل لخادم MySQL و SQL على ما أعتقد).

سيشارك كل استعلام دون سرعة الصوت داخل SerquondsDbConnectionsCope نفس الاتصال ، حتى تتمكن من استخدام منظار المعاملات.

وعليك استخدام shareddbconnectionscope قبل TransactionsCope ، وإلا فلن يكتشف بعض مقدمي الخدمات أنك تنفذ معاملة.

using (new SharedDbConnectionScope())
{
    using (TransactionScope ts = new TransactionScope()
    {

        // Do some sh*i ;)
        ts.Complete();
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top