我是不是必须在所有项目中引用 Entity Framework 6 dll? (不仅是我的 DAL)
Posted
技术标签:
【中文标题】我是不是必须在所有项目中引用 Entity Framework 6 dll? (不仅是我的 DAL)【英文标题】:Do I have to reference the Entity Framework 6 dll in all Projects? (not only my DAL)我是否必须在所有项目中引用 Entity Framework 6 dll? (不仅是我的 DAL) 【发布时间】:2013-12-06 14:10:51 【问题描述】:问题 - 应用程序是否真的必须安装 EF6 才能使用另一个使用 EF6 作为其底层数据检索机制的类库(或者我弄错了)? - 我怎样才能解决这个问题并仍然使用 EF?
场景 我们正在用使用 EF6 获取数据的新版本重写旧 DAL。消费者应用程序不调用 EF 上下文。它们改为调用中间函数(在 DAL 项目的业务逻辑文件夹中),然后调用 EF。
当我有一个正在使用的应用程序引用我的新 DAL(连接字符串和提供程序引用添加到它的 .config)时,编译器会抱怨缺少提供程序:
找不到具有不变名称“System.Data.SqlClient”的 ADO.NET 提供程序的实体框架提供程序。
我可以通过将 EF6 包安装到我的消费应用程序中来解决这个问题,但这是有问题的。我们有大量使用应用程序,其中许多具有并行数据访问机制,通常包括旧版本的 EF。我需要我的 DAL 独立于我的消费者。
这个可以吗?
【问题讨论】:
17 小时内没有回复让我很紧张,因为我问错了问题。我现在知道我可以将 EF dll 添加到我的消费应用程序中并且它可以毫不费力地工作,但是为什么应用程序不利用类库 (DAL) 中提供的提供程序,而不是要求它们在每个消费程序中应用?尤其是当消费应用不提供任何服务时。 我退出到 EF5 并没有出现这个问题。不过,这并不是我原来问题的真正答案。 我有完全相同的问题。差别不大的是它编译成功。但是在运行时,只要调用 BIZ 层中的方法,它就会抛出 IO.FileLoadException。 OCuldn´t 加载文件或程序集 EntityFramework v 6.0.0.0。我小心翼翼地不使用客户端中的域上下文对象,只使用本机类型,但它仍然以某种方式要求 EF dll。到目前为止的任何提示。您是否尝试过以下回复? 相关帖子 - Entity Framework Provider type could not be loaded? 【参考方案1】:从 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;
【讨论】:
我在我的 DAL 中引用了那个 dll,其中 de edmx 模型是。在此之上,我有一个使用 DAL 的具有业务逻辑的 BIZ 层。 BIZ 层也引用了 EF。上面是一个网站,它也有对 EF 4 的引用,对于一些我现在无法触及的遗留东西,它会因为找不到 EF v6.0.0.0 程序集而抛出异常。【参考方案2】:将以下类添加到引用 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))]
【讨论】:
我试过了,但是除非编译成功,否则当从客户端调用BIZ方法时,它会抛出找不到EF6 dll的异常以上是关于我是不是必须在所有项目中引用 Entity Framework 6 dll? (不仅是我的 DAL)的主要内容,如果未能解决你的问题,请参考以下文章
我的项目中安装了哪个版本的Entity Framework?
entity framework 6 添加实体必须用设计器拖吗
Entity Framework Core:使用导航属性而不是连接
如何在MVC 5的类库项目中使用Entity Framework 6 Code First