2015-06-24 21 views
2

对于问题的缘故,我有一个项目结构如下,其中每个层映射到一个项目在我的视觉工作室溶液:跨项目的程序集引用 - 需要多个实体框架引用?

  • 表示层
  • 业务逻辑层
  • 数据层(使用实体框架)

我在我的数据层中定义了存储库类。在BL层中实例化它们时,我得到一个错误,指出对实体框架程序集的引用缺失。我添加了一个对我在DL中使用的同一个实体框架dll的引用,它可以工作。

我的问题是:为什么BL没有引用DL,为什么还需要在BL中添加一个“额外的”EF引用?我显然不想在我的解决方案中控制多个EF版本。

我会认为我的DL是一个“原子”单位,它的所有对象都是自包含的,并且不需要别的东西来正常工作。为什么在实例化DL中定义的类时,我仍然需要添加一个EF引用,DL具有哪个EF引用?

回答

2

这确实是如何构建引擎MSBuild的作品。 Visual Studio过去不会抱怨间接引用,只能在它破坏的TFS构建服务器上找到。至于他们为什么按照他们的方式来构建,我没有答案。

我确实有一个简单的修复方法: 使用solution-level NuGet packages。您将Entity Framework软件包作为NuGet软件包添加到解决方案中,然后检查应该有此参考的所有项目。这种方式也可以防止多个不同版本。

有关详细说明,您可以read this article

+0

嗯...解决方案级nuget包...似乎我要学习一些有趣的感谢你;) – Veverke

+0

虽然带领我的解决方案,我会建议阅读下面的文章更详细的解释:http ://blog.spinthemoose.com/2013/04/21/nuget-tip-3-manage-packages-at-the-solution-level/ – Veverke

+1

不错的发现,我把它添加到其他人的答案。 –