我正在加入潮流并开始使用存储库模式实现UnitOfWork。 仍然需要找到一个与“包含”一起使用的例子。我正在使用由EF生成的代码而不是poco。“。我可以在哪里下载一个?我知道我应该使用poco”,这是另一个故事。
现在我的问题 我显然忽略了这一点。为什么我需要工作单位?
我有很多交易,我做Context.SaveChanges();如果出现问题,它会全部回滚吗? 不是UnitOfwork的意思。如果是这种情况,EF4已经在OBjectContext中内置了一个UnitOFwork。
为什么额外的课程?你能解释一下吗?感谢。
答案 0 :(得分:2)
工作单元用于在多个存储库中保存,作为单个事务的一部分。
例如,如果您正在使用 UserRepository 和 FooRepository ,如果第一个通过,则第二个失败,则交易不同步
工作单元是作为ObjectContext的包装器实现的,这意味着您可以在两个存储库上完成工作,然后在UoW 上执行提交 ,它可以处理两者的更改库。如果其中一个或两个操作失败,则整个事务将失败。
这取决于您如何使用ObjectContext。如果直接使用对象上下文,则可以使用语句将所有操作包装在中。但是大多数人通过存储库访问上下文(并使用DI容器或手动处理上下文)。在这种情况下,需要一个工作单元来处理多个存储库。
Here is an example of EF4/Repository/UoW.
DDD纯粹主义者会争辩说,当聚合边界正确时,存储库不需要工作单元。