如何避免在多个项目中引用实体框架

时间:2015-04-29 10:46:48

标签: c# entity-framework visual-studio

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

我的问题是我需要在我的"来电者中引用EF"让它发挥作用的项目。

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

解   - ConsoleProject   - EntityFrameworkProject(来自Nuget的EF)

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分: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中展示您的存储库,并在<connectionStrings>中添加Project B配置,它应该可以正常运行。

答案 2 :(得分:0)

不幸的是,由于一些奇怪的原因,这是不可能的。您也必须在客户端应用程序中包含EF包,而不仅仅是在数据访问库中 可能只包含所提到的DLL redlaz,但通过这样做,你可以解决很多版本的潜在问题 只需克服所有不情愿,并将EF包添加到您的客户端应用程序中。

相关问题