跨项目的程序集引用 - 需要多个 Entity Framework 引用?

Assembly references across projects - need for more than one Entity Framework reference?

为了这个问题,我有一个结构如下的项目,其中每一层都映射到我的 visual studio 解决方案中的一个项目:

我在我的数据层中定义了存储库 类。在 BL 层中实例化它们时,我收到一条错误消息,指出缺少对 entity framework 程序集的引用。我添加了对在我的 DL 中使用的同一个 entity framework dll 的引用,并且它有效。

我的问题是:为什么让 BL 引用 DL 还不够,为什么我还需要在 BL 中添加对 EF 的 "additional" 引用?我显然不想在我的解决方案中控制多个 EF 版本。

我认为我的 DL 是一个 "atomic" 单元,它的所有对象都是独立的,不需要任何其他东西即可正常运行。为什么在实例化 DL 中定义的 类 时我仍然需要添加一个 EF 引用,而 DL 自己的 EF 引用呢?

这确实是构建引擎 MSBuild 的工作原理。 Visual Studio 过去不抱怨间接引用,只是在 TFS 构建服务器上发现它损坏了。至于他们为什么要这样建,我没有答案。

我有一个简单的解决方法: 使用 solution-level NuGet packages。您将 Entity Framework 包作为 NuGet 包添加到解决方案中,并检查应具有此引用的所有项目。这种方式也可以防止多个不同的版本。

详细解释可以read this article.