实体框架UnitOfWork

3
我正在使用带有EF 4的UnitOfWork模式,想知道EFUnitOfWork的实现应该放在哪里?应该放在Repository层中吗?我把所有接口都放在了Domain层中。这样做是否正确?
我使用Ninject将Repositories注入IUnitOfWork。
我想,实际上并不重要,因为你不会真正测试你的EF特定repositories,对吗?
另一个选择是将其放在数据层中,即EF模型和上下文所在的位置。
将其放在Repository层中,那么该层现在需要引用System.Data.Entity。这样做好还是不好?
2个回答

1
根据DDD原则,您通常希望在解决方案中有一个名为ProjectName.Core的项目。该项目应按以下结构组织:
  • ProjectName.Core -> Repository (所有存储库接口)

  • ProjectName.Core -> DomainModel

  • ProjectName.Core -> Infrastructure -> IUnitOfWork (uow接口)

  • ProjectName.Core -> Infrastructure -> DataAccess(存储库实现和所有与数据库相关的文件,包括uow实现)

有时候,如果项目足够大,我会在解决方案中再添加一个名为ProjectName.Infrastructure.DataAccess的项目,并将所有DataAccess实现放在该项目中。

0
通常为了使代码可读性/理解性更好,实现会放在存储库层中。我并不觉得将你的接口放在域层有任何问题。
你甚至可以像下面这样做:
 - Domain
   ->Interfaces
   ->Repository
      -> Actual Implementation 

然而正如你所说,实际的实现位置并不重要。但是,如果你适当地组织结构,其他人就可以更容易地理解流程。


我不确定您是否希望在领域层中实现,因为那样它将需要引用System.Data.Entity dll,并且我希望我的领域层对EF一无所知。正确吗? - Sam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接