c# - 我是否必须在所有项目中引用 Entity Framework 6 dll? (不仅是我的 DAL)

标签 c# entity-framework entity-framework-6

问题
- 应用程序是否真的必须安装 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/

相关文章:

c# - Azure Web 作业 - 保存应用程序设置以在重新启动后保留

c# - 禁用上下文菜单 web 浏览器控件

c# - StructureMap Setter 注入(inject)未设置属性

c# - 从列表中获取月份名称和年份

mysql - EF6为MySql数据库生成日期比较sql

c# - Entity Framework 上的多个 .Where() 子句可查询

entity-framework - Entity Framework 6.1.2 中有哪些新增功能?

c# - 数据表按总和分组

c# - 使用 Entity Framework 选择多个列

entity-framework - 如何指定包含在 Entity Framework 中的位置