Uba*_*Uba 9 c# entity-framework-6
我知道EF6 EntityFramework.SqlServer存在问题,并包含 var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);在上下文构造函数中.我在DEBUG模式下发布时工作正常.
仅在我以RELEASE模式发布时才出现以下错误.原因EntityFramework.SqlServer.dll在已发布的文件夹中丢失.但是,bin文件夹具有EntityFramework.SqlServer.dll,用于调试和释放模式.
错误:
实体框架提供程序类型"System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer"在与固定名称"System.Data.SqlClient的" ADO.NET提供程序的应用程序配置文件中注册无法加载.确保使用了程序集限定名称,并且程序集可供正在运行的应用程序使用.
为什么只有在我使用RELEASE模式发布时它才会丢失?
Ahm*_*gdy 24
不知道为什么; 但是将此方法添加到您的上下文将使您的项目复制dll
private 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;
}
Run Code Online (Sandbox Code Playgroud)
测试和工作参考:无法加载实体框架提供程序类型?
小智 5
我也有同样的问题。
\n\n发生的情况是,这EntityFramework.SqlServer.dll不是由您的项目直接引用,而是由EntityFramework.dll.
EntityFramework.SqlServer.dll由于我们在代码中没有使用任何这些组件,因此Roslyn编译器应用了一些优化,了解它不需要此组件,然后不会将其复制到该bin文件夹,也不会复制Publish.
EntityFramework.SqlServer.dll您需要做的是在代码中的任何位置创建对 this 某个对象的引用。
例如,我有一个依赖注入容器配置类,我在其中配置我的存储库和上下文,我认为这将是一个很好的位置。所以我创建了一个我从未在任何位置使用的静态属性,但它解决了问题:
\n\nusing System.Data.Entity.SqlServer;\n\npublic class ContainerConfiguration\n{\n // HACK: This code snippet ensures that the DLL (EntityFramework.SqlServer.dll)\n\xc2\xa0\xc2\xa0\xc2\xa0 // not removed by compiler optimizer (csc.exe roslyn)\n public static SqlProviderServices EntitySqlServerHack => SqlProviderServices.Instance;\n\n public void ContainerConfiguration(IContainer container)\n {\n InternalConfigure(container, false);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n