無法加載實體框架提供程序類型?

c# entity-framework entity-framework-6 mstest teamcity-7.1

我正在嘗試在我的機器上安裝的TeamCity上運行我的測試。

System.InvalidOperationException

System.Data.SqlClient ”ADO.NET提供程序的實體框架提供程序類型“ System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServerVersion=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'不能加載。確保提供程序程序集可用於正在運行的應用程序。

有關詳細信息,請參閱http://go.microsoft.com/fwlink/?LinkId=260882

我沒有在我的任何項目中引用System.Data.Entity ,就像在codeplex上建議升級到EF6一樣。

所以,我不知道為什麼我會得到這個例外。當我從VS運行測試時,我沒有得到任何這樣的異常。

我確實嘗試將CopyLocal設置為false然後再次設置為true ..但這似乎也不起作用。

更新

我的app.config有以下內容。這會導致一些我不明白的行為嗎?

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
</configuration>

我在teamcity中得到以下stacktrace。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
  </configSections>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
  </entityFramework>
</configuration>

一般承認的答案

同樣的問題,但我通過Nuget安裝了EF 6。另一個可執行文件缺少EntityFramework.SqlServer。我只是將nuget包添加到該項目中。


熱門答案

我在我的測試項目中遇到了同樣的問題 - 我通過NuGet安裝了最新的EF6位,每次我調用與EF相關的東西:

無法加載“System.Data.SqlClient”ADO.NET提供程序的實體框架提供程序類型“System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer”。確保提供程序程序集可用於正在運行的應用程序。有關詳細信息,請參閱http://go.microsoft.com/fwlink/?LinkId=260882

我的解決方法:我將此方法放在我的測試項目中:

public void FixEfProviderServicesProblem()
{
//The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer'
//for the 'System.Data.SqlClient' ADO.NET provider could not be loaded. 
//Make sure the provider assembly is available to the running application. 
//See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}

從未調用此方法,但我認為編譯器將刪除所有“不必要的”程序集,而不使用EntityFramework.SqlServer,測試失敗。

無論如何:在我的機器上工作;)

注意: 您可以確保從Model / entity項目中對SqlProviderServices進行靜態引用,而不是將該方法添加到測試項目中




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因