使用实体框架的没有存储库模式的依赖注入

时间:2014-10-15 07:16:44

标签: asp.net-mvc entity-framework dependency-injection ninject ninject.web.mvc

到目前为止,我一直在我的项目存储库模式和依赖注入中实现。我使用ORM的Entity Framework,还有一个管理我的存储库的服务层。

我有点想做一些对手头的问题不那么重要的事情。我不太可能更改我的数据库或ORM。对于小型项目,我不需要实施测试。

但我喜欢每次获取数据时都不向数据库发送请求的想法,如果它已经在内存中从那里获取数据。

我的问题是:如果我在Asp.Net MVC应用程序中使用Entiry Framework,而不是使用存储库模式,但仍然在EF的DBContext上使用DI,我可以通过防止往返于数据库服务器的读取来获得性能的好处?

通过在DbContext上实现DI,我的意思是Ninject示例:

kernel.Bind<MyDBContext>().ToSelf().InRequestScope();

由于

2 个答案:

答案 0 :(得分:5)

在EF DbContext之上添加存储库模式可以而不是帮助进行性能优化。

DbContext是一个工作单元,用于跟踪加载/更改/添加的实体。 IDbSet<T>基本上是一个存储库。所以DbContext有一个存储库列表。 DbContext负责执行一些性能优化,例如不加载相同的实体两次,而是在通过id加载两次时返回相同的实例。 当然,要实现此目的,您必须重用相同的DbContext实例。如果您创建了两个DbContext个实例,它们将同时加载同一个实体。

所以使用

kernel.Bind<MyDBContext>().ToSelf().InRequestScope();

并没有把你自己的&#34;存储库模式&#34;在MyDBContext之上完全没问题。

答案 1 :(得分:2)

正如Getting Started with Entity Framework 6 Code First using MVC 5系列Microsoft文章的高级实体框架6方案部分所述,不再需要存储库模式。