كيفية تنفيذ نمط Unitofwork عند استخدام Subund 2.1 (نمط المستودع)؟
-
04-10-2019 - |
سؤال
أنا أستخدم نمط المستودع تحت الصوت (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();
}
}