问题
- 应用程序是否真的必须安装 EF6 才能使用另一个使用 EF6 作为其底层数据检索机制的类库(或者我弄错了)?
- 我怎样才能解决这个问题并仍然使用 EF?
场景
我们正在用使用 EF6 获取数据的新版本重写旧 DAL。消费者应用程序不调用 EF 上下文。他们改为调用中间函数(在 DAL 项目的业务逻辑文件夹中),然后调用 EF。
当我有一个消费应用程序引用我的新 DAL(连接字符串和提供程序引用添加到它的 .config)时,编译器提示缺少提供程序:
No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient'.
我可以通过将 EF6 包安装到我的消费应用程序中来解决这个问题,但这是有问题的。我们有大量的消费应用程序,其中许多应用程序具有并行数据访问机制,通常包括旧版本的 EF。我需要我的 DAL 独立于我的消费者。
这可以做到吗?
最佳答案
我在从 EF4 迁移到 EF6 时遇到了同样的问题。添加 EntityFramework.SqlServer.dll 作为对 DAL 库的引用可以解决 DAL 连接的问题,但不能解决消费应用程序的问题。
出现此问题是因为此 dll 仅通过反射使用,并且由于在编译时不需要它,因此不会在消费应用程序中发布。 hack 解决方案是创建一个无用的引用,只是为了强制复制 dll。
像那样:
public class MyAppContext : DbContext
{
public MyAppContext()
{
// hack to force the EntityFramework.SqlServer.dll to be copied when another project references this one
var forceDllCopy = System.Data.Entity.SqlServer.SqlProviderServices;
}
}
关于c# - 我是否必须在所有项目中引用 Entity Framework 6 dll? (不仅是我的 DAL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20132283/