我正在尝试使用Entity Framework 6.0.2 for SQL Server Compact(代码优先)向项目添加迁移(第一次)。应用程序与数据库通信没有问题。迁移失败,并显示错误消息:
System.InvalidOperationException:
没有为ADO.NET提供程序找到具有不变名称“System.Data.SqlServerCe.3.5”的实体框架提供程序。确保提供程序已在应用程序配置文件的“entityFramework”部分中注册。
项目从来没有引用过SqlServerCe.3.5
,我找不到Visual Studio找到的那个&替换命令
app.config
文件包含:
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</configSections>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.1" newVersion="4.0.0.1" />
</dependentAssembly>
</assemblyBinding>
</runtime>
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
<parameters>
<parameter value="System.Data.SqlServerCe.4.0" />
</parameters>
</defaultConnectionFactory>
</entityFramework>
<appSettings>
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0.0.1, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
有谁知道如何强制迁移使用SqlServerCe.4.0
(+/-删除对3.5的引用)?谢谢。
不幸的是,删除绑定重定向节点只会导致:
System.Data.Entity.Core.ProviderIncompatibleException: 从数据库获取提供程序信息时发生错误。这可能是由实体框架使用不正确的连接字符串引起的。检查内部异常以获取详细信息,并确保连接字符串正确。 ---&GT; System.Data.Entity.Core.ProviderIncompatibleException:提供程序未返回ProviderManifestToken字符串。 ---&GT; System.ArgumentException:给定的连接不是'SqlCeConnection'类型。
您完全正确 - 此项目正在使用私有部署。 System.Data.SqlServerCe和System.Data.SqlServerCe.Entity的引用程序集版本都是4.0.0.1
我需要删除绑定重定向节点,如erik建议的那样,并将提供程序添加到app config的EntityFramework节点(应用程序使用提供程序服务的基于代码的配置,因此不包括这些),如下所示
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
<provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
</providers>
答案 0 :(得分:1)
删除绑定重定向。看起来您正在尝试使用私有部署,但是您使用的是正确的System.data.SqlServerCe.dll(请检查程序集版本)。如果它是4.0.0.0而不是4.0.0.1,则更改为DbProviderfactories设置以指向正确的程序集版本
答案 1 :(得分:0)
我只花了半天时间试图让SqlServerCe 4.0 SP1又名4.0.0.1在没有异常的情况下工作。 终于解决了,希望它能帮助别人。
复制&#34;程序文件(x86)\ Microsoft SQL Server精简版\ v4.0 \ Private&#34;您的网络应用的amd64
和x86
到bin
文件夹,并将它们包含在项目中(以便它们可以部署)
不要复制&#34; System.Data.SqlServerCe.dll&#34;和&#34; System.Data.SqlServerCe.Entity.dll&#34;
web.config
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.4.0" />
<add name="Microsoft SQL Server Compact Data Provider 4.0" invariant="System.Data.SqlServerCe.4.0" description=".NET Framework Data Provider for Microsoft SQL Server Compact" type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=4.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>