[英]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.