Entity framework 实体框架工作单元

Entity framework 实体框架工作单元,entity-framework,repository-pattern,unit-of-work,Entity Framework,Repository Pattern,Unit Of Work,我在EF4中使用UnitOfWork模式,我只是想知道EFUnitOfWork的实现应该在哪里?它应该位于存储库层吗?我的所有接口都在域层。这听起来对吗 我正在使用Ninject向存储库注入IUnitOfWork 我想这真的不重要,因为你不会真正测试你的EF特定存储库,对吗 另一个选择是让它位于EF模型和上下文所在的数据层中 通过将其放在存储库层中,该层现在需要对System.Data.Entity的引用。坏的还是好的?通常,出于可读性/理解性的原因,实现位于存储库层。我认为在域层中使用接口没有

我在EF4中使用UnitOfWork模式,我只是想知道EFUnitOfWork的实现应该在哪里?它应该位于存储库层吗?我的所有接口都在域层。这听起来对吗

我正在使用Ninject向存储库注入IUnitOfWork

我想这真的不重要,因为你不会真正测试你的EF特定存储库,对吗

另一个选择是让它位于EF模型和上下文所在的数据层中


通过将其放在存储库层中,该层现在需要对System.Data.Entity的引用。坏的还是好的?

通常,出于可读性/理解性的原因,实现位于存储库层。我认为在域层中使用接口没有任何问题

你甚至可以有如下类似的东西

 - Domain
   ->Interfaces
   ->Repository
      -> Actual Implementation 

然而,正如您所说,实际实现在哪里并不重要。但是,如果您正确组织结构,其他人很容易理解流程。

在DDD之后,您通常希望在解决方案中使用ProjectName.Core项目。该项目的结构如下:

  • ProjectName.Core->Repository(全部 您的存储库接口)

  • ProjectName.Core->DomainModel

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

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


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

我不确定您是否希望在域层中实现,因为它需要引用System.Data.Entity dll,我希望我的域层不知道EF。对的