0

在我的项目中,我需要使用 EF 并从表示层抽象查询。根据我在网上阅读的问题和答案,EF 在其 DbSet 上构建了存储库模式,在 DbContext 上具有工作单元。

存储库模式可以轻松满足要求,但我不想重复此实现,现在很困惑我应该在哪里初始化或访问 DbContext。它应该在服务层上吗?

本项目将使用 MVC4 Api

4

1 回答 1

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 单元可测试在物理数据库上。

希望这一切都有帮助!

于 2012-11-25T06:14:56.300 回答