实体框架 - 没有存储库抽象

时间:2012-11-22 10:01:37

标签: entity-framework asp.net-mvc-4

在我的项目中,我需要使用EF并从Presentation层抽象出查询。基于我在网上阅读的问题和答案,EF构建了DbSet上的存储库模式和DbContext上的工作单元。

存储库模式可以很容易地满足要求,但我不想重复这个实现,现在混淆了我应该在哪里初始化或访问DbContext。它应该在服务层吗?

MVC4 Api将用于此项目

1 个答案:

答案 0 :(得分:0)

我过去所看到的一种方法是,通过为您的上下文创建一个接口,然后从您的服务层(业务逻辑层)进行数据访问调用,从本质上删除DbContext对物理数据库的依赖性。

然而,使用这种方法存在一个缺点,即您的单元测试(将使用DbContext的Fake实现)将使用LINQ to Objects来运行您的查询,而您的具体实现将使用LINQ to Entities不支持所有LINQ to Objects方法。

MSDN上的文档(http://msdn.microsoft.com/en-us/library/bb738550.aspx)突出了这些差异。

我还建议阅读这篇文章(http://kearon.blogspot.com.au/2011/02/mocking-entity-framework-4-code-first.html),该文章演示如何通过删除使DbContext单元可测试对物理数据库的依赖依赖。

希望这一切都有帮助!