2015-06-24 22 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

不錯的發現,我把它添加到其他人的答案。 –