2010-10-30 46 views
1

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

如果它只在存储库中创建,则方法不能在服务/业务层中执行延迟加载(无法返回IQueryable)。

+0

类似的问题在这里:http://stackoverflow.com/questions/4043678/where-should-i-create-my-entity-framework-context-object-in-an-mvc-app/4043920#4043920。 (不完全相同的问题,但适用相同的原则)。 – Yakimych 2010-10-30 07:55:25

回答

1

大多数情况下在存储库之外创建它。如果您在服务中创建它,代码将与上下文的实例类型强烈耦合。这意味着你不能拥有一个仓库而没有EF。你真正想要做的是对系统进行分层,以便存储库可以使用EF作为数据源或者其他可能的东西(比如内存表)。

这对于单元测试非常重要,因为您不想为了运行单元测试而实例化数据库。

看看http://blog.staticvoid.co.nz/2011/10/staticvoid-repository-pattern-nuget.html这是我如何使用EF4实现一个存储库,同时我也创建了一个nuget包来实现这个模式,使得获得一个很好的解耦存储库系统的代码是约4条线。