实体框架UnitOfWork

时间:2011-03-08 02:50:35

标签: entity-framework repository-pattern unit-of-work

我在EF 4中使用UnitOfWork模式,只是想知道EFUnitOfWork的实现应该在哪里生效?它应该存在于存储库层吗?我在Domain Layer中拥有所有接口。这听起来不错吗?

我正在使用Ninject通过IUnitOfWork注入存储库。

我想这真的没关系,因为你不打算真正测试你的EF特定存储库吗?

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

通过将其放在Repository Layer中,该层现在需要对System.Data.Entity的引用。不好还是好吗?

2 个答案:

答案 0 :(得分:1)

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

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

  • ProjectName.Core - >的DomainModel

  • ProjectName.Core - >基础设施 - > IUnitOfWork(uow interface)

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

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

答案 1 :(得分:0)

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

您甚至可以使用类似下面的内容

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

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