【问题标题】:Remove coupling for EF DBContext and infrastructure layer移除 EF DBContext 和基础设施层的耦合
【发布时间】:2012-06-15 23:00:45
【问题描述】:

我在基础设施层定义了我的接口,使用依赖注入,但现在的问题是,如何在基础设施层和服务层使用接口解决 DBContext 的依赖关系,而不添加对 EF dll 的引用。

【问题讨论】:

    标签: c# entity-framework dependency-injection inversion-of-control ioc-container


    【解决方案1】:

    如果您需要从应用程序中完全隐藏 EF,则需要使用 repository pattern,将 EF 隐藏在您的存储库后面并生成(或编写)POCO 实体。

    如果你比较务实,你可以use generic repositories with IQueryable support,它可以带来很好的开发和单元测试体验,但是选择什么取决于你。

    【讨论】:

      【解决方案2】:

      您可以修改 T4 文件(也称为 T4 模板或 .tt 文件)以创建接口以及上下文,甚至可以将它们分成两个单独的 T4 文件,以便将它们放置在单独的程序集中。您也可以让上下文返回 IQueryable 而不是 ObjectQuery,但是...

      为了编写在数据库上而不是在内存中运行的优化查询,查询必须考虑到它们下面的技术,你不能编写通用查询,在内存列表上对它们进行单元测试,然后期望它们正确转换为 SQL 并高效运行且无异常。 - 您必须在真实数据库(带有演示数据)上测试您的查询。

      您应该做的是实现对上层隐藏 DAL 技术的服务,但在其实现内部使用 EF 的全部功能以尽可能高效地工作。

      可以模拟这些服务,以测试它们之上的层,并且可以使用测试数据库(例如,使用由测试类创建和启动的 LOCALDB 实例)来测试服务本身及其对 EF 的使用。

      许多相关链接中的一些:
      Generic Repository With EF 4.1 what is the point
      ASP.NET MVC3 and Entity Framework Code first architecture
      Is UnitOfWork and GenericRepository Pattern redundant In EF 4.1 code first?
      https://softwareengineering.stackexchange.com/questions/133448/unit-integration-testing-my-dal

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-11-22
        • 2019-01-27
        • 1970-01-01
        • 1970-01-01
        • 2014-06-22
        • 2016-04-26
        相关资源
        最近更新 更多