Entity framework 为什么VS 2015需要引用System.Data.Entity,而VS 2013不需要?

Entity framework 为什么VS 2015需要引用System.Data.Entity,而VS 2013不需要?,entity-framework,reference,visual-studio-2015,Entity Framework,Reference,Visual Studio 2015,我安装了VS 2015(不是RC,尽管我之前安装过)。我在VS 2013中打开了一个运行良好的现有解决方案,并出现以下错误 BC30652组件“System.Data.Entity”所需的参考, 版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089' 包含“EntityObject”类型。将一个添加到项目中 按照VS的建议,我在项目中添加了对System.Data.Entity的引用,并且成功了。然而,我想知道为什么会发生这种情况 如果删除Syste

我安装了VS 2015(不是RC,尽管我之前安装过)。我在VS 2013中打开了一个运行良好的现有解决方案,并出现以下错误

BC30652组件“System.Data.Entity”所需的参考, 版本=4.0.0.0,区域性=中性,PublicKeyToken=b77a5c561934e089' 包含“EntityObject”类型。将一个添加到项目中

按照VS的建议,我在项目中添加了对System.Data.Entity的引用,并且成功了。然而,我想知道为什么会发生这种情况

如果删除System.Data.Entity引用,VS 2013仍然有效,但VS 2015会抛出错误。该项目确实引用了System.Data

有关解决方案的说明:

  • 最初开发于VS 2013
  • .NET4.0
  • 还参考了System.Data
  • 有两个项目,一个主项目(导致错误)和一个DAL
  • DAL具有实体数据模型(.edmx)

我从Visual Basic语言团队那里得到确认,这很可能是由于他们在Visual Studio 2015中更改了编译器:

。。。事实上,我们做了一些工作,试图让事情变得更加宽容。但总而言之,编译器可能需要更多的引用才能保证正确性。如果可以,请添加它们。我相信如果你用电灯泡的话,有一个快速的解决方法


这只是一个猜测,但这可能是由于编译器处理可传递依赖关系的方式发生了变化。例如,假设您的项目A依赖于库B,而B公开了从EntityObject派生的公共类型C。然后,A是否需要对实体框架的引用通常取决于它对C类所做的操作。不幸的是,没有关于如何工作的硬规则,这可能取决于编译器的实现。由于VS 2015和.NET 4.6附带了新的C#和VB编译器,规则可能会以微妙的方式发生变化。@divega您知道一种在黑暗中测试快照的方法吗?首先,您能否确认您的应用程序依赖于一个库,该库公开了从EntityObject派生的公共类型?如果是,您能否在问题中添加更多关于应用程序代码如何与该类型交互的信息?有了这些信息,就有可能创建一个简单的repo(不需要涉及EF),我们可以向语言爱好者介绍它。也可以想出一个解决方法,这样如果你想要的是引用,就不需要添加引用。我可以确认VS 2015打破了可传递依赖,至少对我来说是这样。我有一个简单的解决方案,其中项目a引用库B,而库B反过来又引用库C。项目a不直接引用库C,而是通过库B使用其中的类型。自2003年以来,它正确编译并在每个VS中运行,但不是在2015年。我得到了相同的错误代码BC30652导致错误的项目引用了数据访问层。DAL有一个实体数据模型。我想你们已经明白了。谢谢,这就解释了我在这个问题上的问题: