使用Entity Framework实现无需使用仓储模式的依赖注入

3
到目前为止,我在我的项目中使用了存储库模式和依赖注入。我使用Entity Framework进行ORM,并且还有一个服务层来管理我的存储库。
我有点觉得做一些与手头问题不太相关的事情。我不太可能更改我的数据库或ORM。对于小型项目,我没有实现测试的必要。
但是,如果数据已经在内存中,我喜欢不每次获取数据时都向数据库发送请求,而是直接从内存中获取。
我的问题是:如果我在Asp.Net MVC应用程序中例如使用Entity Framework,并且不使用存储库模式,但仍然在EF的DBContext上使用DI,我可以通过防止针对读取操作到数据库服务器的往返来获得性能优势吗?
实施DbContext上的DI是指像Ninject示例中的以下内容:
kernel.Bind<MyDBContext>().ToSelf().InRequestScope();

谢谢

2个回答

5

在EF DbContext上添加仓储模式并不能帮助性能优化。

DbContext是一个工作单元,它跟踪已加载/更改/添加的实体。而IDbSet<T>基本上就是一个仓库。所以DbContext有一系列的仓库列表。DbContext负责进行一些性能优化,例如不会重复加载相同的实体,而是在通过id加载两次时返回同一个实例。

当然,为了使其生效,您必须重用相同的DbContext实例。如果创建两个DbContext实例,则它们都会加载相同的实体。

因此,使用

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

不需要在MyDBContext之上添加自己的“仓储模式”也是完全可以的。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接