EF在哪里创建和处理上下文?在业务层或存储库中?

时间:2010-10-30 01:33:29

标签: entity-framework

在存储库类中创建和处理上下文是否更好?或者更好的是在服务中创建上下文并通过依赖注入将其传递给每个存储库?

如果仅在存储库中创建,则方法不能在服务/业务层中进行延迟加载(不使用返回IQueryable)。

1 个答案:

答案 0 :(得分:1)

大多数人最终在存储库外创建它。如果在服务中创建它,代码将强烈耦合到上下文的实例类型。这意味着您无法拥有其中一个存储库而无需使用EF。您真正想要做的是分层系统,以便存储库可以使用EF作为数据源或可能使用其他东西(例如内存表)。

在单元测试方面,这很重要,因为您不希望为了运行单元测试而实例化数据库。

看看http://blog.staticvoid.co.nz/2011/10/staticvoid-repository-pattern-nuget.html这是我对如何使用EF4实现存储库的看法,我还创建了一个nuget包来实现这种模式,以便获得一个代码很好地解耦的存储库系统大约有4行。