我想将Entity Framework封装在一个项目中。该项目将单独进行数据库访问。更新时,我想将域模型映射到EF。目的是解决方案的其他层应该不了解基础设施。
我的问题是我需要在我的"来电者中引用EF"让它发挥作用的项目。
有没有办法避免这种情况?
解 - ConsoleProject - EntityFrameworkProject(来自Nuget的EF)
答案 0 :(得分:1)
我使用了这种方法:https://stackoverflow.com/a/22970805/3874212
答案 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包添加到您的客户端应用程序中。