繁体   English   中英

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

[英]Do I have to reference the Entity Framework 6 dll in all Projects? (not only my DAL)


- 应用程序是否真的必须安装EF6才能使用另一个使用EF6作为底层数据检索机制的类库(或者我错了)?
- 我如何解决这个问题仍然使用EF?

脚本
我们正在用一个使用EF6获取数据的新版本重写旧的DAL。 消费者应用程序不会调用EF上下文。 他们改为调用中间函数(在DAL项目的Business Logic文件夹中),然后调用EF。

当我有一个消费应用程序引用我的新DAL(连接字符串和提供程序引用添加到它的.config)时,编译器会抱怨缺少提供程序:

没有为ADO.NET提供程序找到具有不变名称“System.Data.SqlClient”的实体框架提供程序。

我可以通过将EF6软件包安装到我的消费应用程序中来解决这个问题,但这是有问题的。 我们有大量消费应用程序,其中许多具有并行数据访问机制,通常包括旧版本的EF。 我需要我的DAL独立于我的消费者。

可以这样做吗?

从EF4迁移到EF6时遇到了同样的问题。 添加EntityFramework.SqlServer.dll作为DAL库的引用可以解决DAL连接的问题,但不能解决消费应用程序的问题。

出现此问题的原因是此dll仅通过反射使用,并且在编译时不需要,因此不会在使用应用程序中发布。 黑客解决方案是做一个无用的引用只是为了强制复制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;
    }
}

将以下类添加到引用EntityFramework的数据访问项目中

[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = true)]
public class ReferenceTypeAttribute : Attribute
{
    private readonly Type _type;

    public ReferenceTypeAttribute(Type type)
    {
        _type = type;
    }
}

然后在下一行添加到此项目的AssemblyInfo.cs

[assembly: ReferenceType(typeof(System.Data.Entity.SqlServer.SqlProviderServices))]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM