除非您在Data层中使用Repository模式,否则您是在浪费时间。
UoW的目的是处理多个存储库实例之间的更改,这可以通过以下方式完成:
- Unit of Work derives from the actual underlying context (DataContext - L2SQL, ObjectContext/EF)
- Repositories take a Unit of Work in their ctor.
工作单元做两件事:
- Have a
Commit()
method
- Expose the underlying object/entity set to the Repository.
设置这一切有点棘手,但一旦完成,流程应该是这样的:
- Controller get s DI ed a service and a unit of work (both via Interfaces)
- Controller calls method on a service ("CustomerServices.AddOrder()")
- Service calls method on Repository
- Repository calls "Add" method on "Order" object/entity set
- Controller commits Unit of Work
从本质上讲,每个层都在其构造函数中获取“下一层”的一个实例所有东西都应该是DI和接口驱动的。UoW不依赖任何东西,但存储库依赖它来持久化到“内部内存”(ORM),然后UoW“提交”将把更改推送到数据库(基本上封装了“SaveChanges”方法)。
由于工作单元是一个基础设施/持久性/数据库/事务性问题,因此它应该进入您的数据层。应仅由控制器引用。