entity-framework - update - entity framework是什麼




找不到具有不變名稱“System.Data.SqlClient”的ADO.NET提供程序的實體框架提供程序 (20)

今天遇到這個問題時,使用一組Web服務(每個服務在不同的項目中)以及一個單獨的項目,其中包含某些服務的集成測試。

我一直在EF5上使用這個設置一段時間,而不需要包含集成測試項目對EF的引用。

現在,升級到EF6後,似乎我也需要在集成測試項目中包含對EF6的引用,儘管它沒有在那裡使用(就像user3004275指出的user3004275 )。

適應症你面臨著同樣的問題:

  • 直接調用EF(連接到數據庫,獲取數據等)工作正常,只要它們從引用EF6的項目開始。
  • 通過已發布的服務接口調用服務可以正常工作; 即在服務中“內部”沒有丟失引用。
  • 儘管在該項目中不使用EF,但直接從服務之外的項目調用服務項目中的公共方法將導致此錯誤; 只在被調用的項目的內部

第三點是什麼讓我停下了一段時間,我還不確定為什麼這是必需的。 在我的集成測試項目中添加ref到EF6無論如何解決了它...

在nuget下載EF6並嘗試運行我的項目後,它返回以下錯誤:

找不到名稱為“System.Data.SqlClient”的ADO.NET提供程序的實體框架提供程序。 確保提供程序在應用程序配置文件的'entityFramework'部分中註冊。 有關更多信息,請參閱http://go.microsoft.com/fwlink/?LinkId=260882


刪除BIN文件夾為我做了


在使用Entity Framework 6和SQL Server Compact 4.0時遇到同樣的錯誤。 有關EF6 Entity Framework Providers的 MSDN文章很有幫助。 在包管理器控制台中將各自的提供程序命令作為nuget包運行可能會解決問題,因為NuGet包也會自動將註冊添加到配置文件。 我運行了PM> Install-Package EntityFramework.SqlServerCompact來解決問題。


在我的情況下,一切工作正常,然後突然停止工作,因為我認為Resharper改變了一些導致問題的改變。 我的項目分為數據層,服務和表示層。 我在我的數據層安裝並引用了實體框架,但仍然錯誤沒有消失。 卸載並重新安裝也不起作用。 最後,我通過將數據層設置為啟動項目,進行遷移,更新數據庫並將啟動項目更改回我的表示層來解決此問題


將以下添加到您的app.config。

 <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="v11.0" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>
  </entityFramework>

展開YourModel.edmx文件並在YourModel.Context.tt下打開YourModel.Context.cs類。

我在使用部分添加了以下行,並且該錯誤對我來說是固定的。

使用SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;

每次文件自動生成時,您可能必須將此行添加到文件中。


您不需要在您的控制台應用程序中安裝實體框架,只需要添加對程序集EntityFramework.SqlServer.dll的引用即可。 您可以將此程序集從使用實體框架的類庫項目複製到LIB文件夾並添加對其的引用。

綜上所述:

  • 類庫應用程序:
    • 安裝實體框架
    • 編寫你的數據層代碼
    • 除連接字符串外,app.config文件具有與實體框架相關的所有配置。
  • 創建一個控制台,Web或桌面應用程序:
    • 添加對第一個項目的引用。
    • 添加對EntityFramework.SqlServer.dll的引用。
    • app.config / web.config具有連接字符串(請記住,配置條目的名稱必須與DbContext類的名稱相同。

我希望它有幫助。


您已將EF添加到類庫項目。 您還需要將其添加到引用它的項目(您的控制台應用程序,網站或其他)。


我也有類似的問題。我的問題通過執行以下操作來解決:


我今天遇到這個問題。 我有用於測試的EF63 NuGet包和控制台應用程序的數據存儲庫類庫,它只引用類庫項目。 我創建了非常簡單的構建後命令,它將EntityFramework.SqlServer.dll從類庫Bin \ Debug文件夾複製到控制台應用程序的Bin \ Debug文件夾並解決問題。 不要忘記將entityFramework節添加到控制台應用程序的.config文件中。


我剛進入相同的問題,它看起來像EntityFramework,雖然從NuGet包管理器安裝沒有正確安裝在項目中。

我設法通過在程序包管理器控制台上運行以下命令來修復它:

PM> Install-Package EntityFramework

我幾乎嘗試了以上所有內容,沒有任何工作。

只有當我將默認項目EntityFrameworkEntityFramework.SqlServer屬性中的引用DLL Copy LocalTrue時,它才開始工作!


我有一個控制台應用程序和類庫。 在類庫中,我創建了實體數據模型(右鍵單擊類庫>添加>新建項目>數據> ADO.NET實體數據模型6.0),並將引用放入控制台應用程序中。 所以,你有控制台應用程序,它具有引用類庫和內部類庫你有EF模型。 當我試圖從表中獲取一些記錄時,我遇到了同樣的錯誤。

我通過以下步驟解決了此問題:

  1. 右鍵點擊解決方案,然後選擇“管理NuGet軟件包解決方案”選項,NuGet軟件包管理器窗口將顯示出來。
  2. 轉到'Installed packages'下的'Manage'選項提示:實體框架已添加到Class Library中,因此您將在'Installed packages'下有EntityFramework,您將看到'Manage'選項
  3. 點擊'管理'選項,並檢查安裝包到項目,其中包含EF模型的類庫(在我的情況下,我設置複選框安裝包到控制台應用程序,它已經參考了內部EF模型的類庫)

這就是我所要做的一切,一切都很完美。

我希望它有幫助。


我有同樣的錯誤。 奇怪的是,只有當我使用我的dbContext查詢我的任何模型或獲取其列表時,才會發生這種情況:

var results = _dbContext.MyModel.ToList();

我們試圖重新安裝實體框架,正確引用它,但無濟於事。

幸運的是,我們試圖檢查Nuget for ALL解決方案,然後更新所有內容或確保everything都是相同的版本,因為我們注意到這兩個項目在Web項目上有不同的EF版本。 它的工作原理。 錯誤消失了。

以下是關於如何為所有解決方案管理Nuget的屏幕截圖:


每個人我需要你注意,兩個DLL EntityFramework.dll和EntityFramework.SqlServer.dll是DataAccess層庫它不是邏輯的使用它們在視圖或任何其他layer.it解決您的問題,但它是不合邏輯的。

合乎邏輯的方式是將enitiess屬性刪除並用Fluent API替換它們,這是真正的解決方案


注意:從Model生成數據庫Sql時,我遇到了這個問題。 它創建了所有表格,但不會導出更改。 您需要注意的是,當您嘗試使用DDL生成模板將SSDLtoSQL10導出時,會生成此錯誤。 它希望MySQL連接在這裡,所以請確保您從模型屬性中的下拉式DDL生成模板SSDLtoMySQL中進行選擇。 花了一整天的時間!


由於消息顯示我們需要添加提供者System.Data.SqlClient,這就是為什麼我們需要安裝具有兩個dll的EntityFramework的nuget包,但是如果我們僅開發控制台應用程序,那麼我們只需要添加EntityFramework.SqlServer.dll的引用


當您通過Nuget安裝實體框架6 Nuget 。 EntityFramework.SqlServer有時會錯過另一個可執行文件。 只需將Nuget包添加到該項目。

有時以上對測試項目不起作用

要在測試項目中解決此問題,只需將此方法放入測試項目中:

public void FixEfProviderServicesProblem()
{
    var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}

這個方法從來沒有被調用,但作為我的觀察,編譯器將刪除所有“不必要的”程序集,並且不使用EntityFramework.SqlServer東西,測試失敗。


而不是添加EntityFramework.SqlServer來託管項目,你可以確保從你的模型/實體項目這樣靜態引用它

static MyContext()
{
    var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
    if(type == null)
        throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}

這將使構建過程包含與主機項目的程序集。

更多信息在我的博客http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/


這些都不適合我。 我在另一個問題中找到了解決方案。 我會在這裡添加它以便於參考:

你需要做一個引用,所以它會被複製到應用程序的路徑中。 因為稍後它將在運行時被引用。 所以你不需要復制任何文件。

private volatile Type _dependency;

public MyClass()
{
    _dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}




entity-framework