【问题标题】:How to avoid references to Entity framework in multiple projects如何避免在多个项目中引用实体框架
【发布时间】:2015-04-29 10:46:48
【问题描述】:

我想将实体框架封装在一个项目中。该项目将单独进行数据库访问。更新时,我想将域模型映射到 EF。目的是解决方案的其他层不应该了解基础架构。

我的问题是我需要在我的“调用者”项目中引用 EF 才能使其工作。

有没有办法避免这种情况?

解决方案 - 控制台项目 - EntityFrameworkProject(来自 Nuget 的 EF)

【问题讨论】:

  • 您是否尝试过使用 Unit Of Work 的存储库设计模式?
  • 如果您在存储库项目中为 EF 生成 POCO 对象,您只需要对该项目的引用,并且在您的“调用者项目”中不需要 EF 引用?
  • 创建负责数据库连接的项目并创建存储库(工作单元也是个好主意)。使用 DTO 创建一些接口,并且您的其他项目不应包含对 EF 的引用。

标签: c# entity-framework visual-studio


【解决方案1】:

使用 EF6 和基于代码的配置,现在可以做到这一点。

[DbConfigurationType(typeof(MyDbContextConfiguration))]
internal class MyDbContext : DbContext
{
    public DbSet<MyModel> MyModels { get; set; }
}

internal class MyDbContextConfiguration : DbConfiguration
{
    public MyDbContextConfiguration()
    {
        SetProviderServices("System.Data.SqlClient", SqlProviderServices.Instance);
    }
}

如果您如上所述在Project A 中配置您的数据库,那么只有Project A 需要引用EntityFramework,并且任何引用它的项目,例如Project B,都不会尝试在自己的程序集中查找提供程序。

Project A 中公开您的存储库,并在Project B 中添加&lt;connectionStrings&gt; 配置,它应该可以完美运行。

【讨论】:

    【解决方案2】:

    我使用了这种方法:https://stackoverflow.com/a/22970805/3874212

    1. 我只在控制台启动项目中引用了EntityFramework.SqlServer.dll。
    2. 我在我的其他项目中安装了实体框架。
    3. 我从 EF 项目中的 DB 创建模型
    4. 我将连接字符串从 EF 项目中的 app.config 移动到控制台项目。

    【讨论】:

      【解决方案3】:

      不幸的是,由于某种奇怪的原因,这是不可能的。您还必须在客户端应用程序中包含 EF 包,而不仅仅是在数据访问库中。
      可以只包含提到的 DLL redlaz,但这样做会导致版本出现很多潜在问题。
      只需克服所有不情愿,将 EF 包也添加到您的客户端应用程序中。

      【讨论】:

        猜你喜欢
        • 2017-07-28
        • 2012-10-28
        • 2011-05-25
        • 1970-01-01
        • 2011-02-13
        • 2015-08-25
        • 2016-03-11
        • 2013-10-07
        • 1970-01-01
        相关资源
        最近更新 更多