سؤال

وQ السريع بالنسبة لك خبراء نمط هناك.

وأريد نمط مستودع الذي نزع إلى جانب المستوى من التكنولوجيا الفعلية الوصول إلى البيانات، ولقد لم تقرر على ذلك حتى الآن وأريد أن تكون مرنة. لذلك، يمكن أن يكون هذا L2S، L2E، NHibernate، لايت سبيد أو أي شيء.

ولكن أنا الحصول على الخلط حول هذا الشيء UnitOfWork.

في العالم L2S، يبدو أن هذا DataContext الخاص بك.

ولكن ماذا عن العالم غير L2S، تخيل كنت تستخدم SQL مكتوبة بخط اليد على سبيل المثال.

وسؤالي هو من يفعل ماذا؟ في بلدي () طريقة Repo.Save، ينبغي لهذا الاتصال UnitOfWork.Commit التي ثم يقوم بإنشاء INSERT المطلوب / UPDATE SQL؟

ولا تتوقع إجابة محددة، ولكن بعض المناقشات أن تكون جيدة، فقط للتأكد من أنني على الطريق الصحيح!

والشكر

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

المحلول

ومستودعات بالتأكيد يمكن أن نطلق الالتزام / حفظ / تقديم على وحدة من وجوه العمل، أو أنها يمكن أن يترك هذا الأمر للمستهلك. انا افضل السيناريو الأخير، لأنه يتيح للمستهلك للسيطرة على عمر الوحدة الدرجة العمل، والذي يسمح للمستهلك للمشاركة مستودعات متعددة:

// outside the repository layer
// int productId defined elsewhere
// int quantity defined elsewhere

IUnitOfWork unitOfWork = ... instantiate/get a new instance of your DataContext ...

ProductRepository productRepository = new ProductRepository(unitOfWork);
Product product = productRepository.GetById(productId);

Order order = new Order();
order.AddOrderLine(product, quantity);

OrderRepository orderRepository = new OrderRepository(unitOfWork);
orderRepository.Add(order);

unitOfWork.Save(); // This calls SubmitChanges() on the DataContext
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top