2016-01-22 45 views
0

我一直在試圖找出EntityFramework.CoreEntityFramework.MicrosoftSqlServer之間的區別,找出我需要哪一個軟件包。我直到今天才注意到,在我的Visual Studio解決方案中,它同時具有WebUI項目和DataAccess項目,WebUI僅包含EntityFramework.MicrosoftSqlServer,而DataAccess項目僅包含EntityFramework.Core我需要哪一個? EntityFramework.Core或EntityFramewor.MicrosoftSqlServer?

這兩者之間的真正區別是什麼,什麼時候應該包括一個和另一個?我正在爲整個解決方案使用ASP.Net 5 Core。

回答

2

EntityFramework.MicrosoftSqlServer取決於EntityFramework.Relational而後者取決於EntityFramework.Core。恢復項目是關於創建依賴關係圖並將所有必需的包(不管它們是否在project.json中指定)安裝到項目中。 在你的情況下,你指定的只是EntityFramework.MicrosoftSqlServer,但在還原過程中,其他依賴項(包括EntityFramework.Core)將被取消,因此不需要明確指定EntityFramework.Core。

如果您使用dnx,則可以使用dnu list(您可以使用--details標誌查看更多詳細信息)來查看依賴關係圖,或者,如果您很勇敢,則可以查看project.lock.json文件。

+0

它有什麼優勢僅指定一個與都? – Matthew

+0

如果您決定將'EntityFramework.MicrosoftSqlServer'依賴項移動到另一個項目,或者他們決定從'EntityFramework.MicrosoftSqlServer'中刪除'EntityFramework.Core'依賴項,那麼它們將不會繼續編譯。除此之外沒有優勢 –

+0

我不會添加隱式依賴關係。這是更多的事情來維護和 - 與貝塔斯一樣 - 你可能最終會因爲重命名或版本不匹配而出現一些奇怪的問題。此外,請注意,您已經沒有指定所有隱式依賴關係 - 您必須將十個(如果不是數百)包引用添加到您的project.json中。 – Pawel

1

兩者都是必需的,但如果您添加EntityFramework.MicrosoftSqlServer,那麼將爲您添加EntityFramework.Core,因爲這是EntityFramework.MicrosoftSqlServer的要求。

EntityFramework.Core包含所有的EntityFramework如DbContextDbSet的核心代碼和任何IQueryable extensions藏漢作爲很多的其它內部代碼。

EntityFramework.MicrosoftSqlServer包含數據庫特定的sql語法和sql server的連接代碼。還有其他數據庫提供者可用。

可用的數據庫供應商:

  • EntityFramework.InMemory(這是好是不需要數據庫編寫測試)
  • EntityFramework.Sqlite
  • EntityFramework.MicrosoftSqlServer