【问题标题】:Dependency Injection without Repository Pattern using with Entity Framework不使用存储库模式的依赖注入与实体框架一起使用
【发布时间】:2014-10-15 07:16:43
【问题描述】:

到目前为止,我一直在我的项目中实施存储库模式和依赖注入。我为 ORM 使用实体框架,并且还有一个服务层来管理我的存储库。

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

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

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

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

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    在 EF DbContext 之上添加存储库模式有助于性能优化。

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

    所以使用

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

    不要将您自己的“存储库模式”放在MyDBContext 之上是完全可以的。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-21
        相关资源
        最近更新 更多