我有一个使用Sql CE 3.5 SP2的应用程序。我已经包含了Sql CE所需的DLL - 这里有7个(C:\ Program Files(x86)\ Microsoft SQL Server Compact Edition \ v3.5),我只是将其作为应用程序文件添加到我的部署包中。
我也使用EF访问数据库,所以我在app.config文件中添加了一个条目来提供数据提供者:
<system.data>
<DbProviderFactories>
<add name="Microsoft SQL Server Compact Data Provider"
invariant="System.Data.SqlServerCe.3.5"
description=".NET Framework Data Provider for Microsoft SQL Server Compact"
type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>
为我部署的应用程序执行上述操作;但是,当我从VS2010以调试模式运行我的应用程序时,通过EF运行的任何数据库调用都会出现此错误:
The specified store provider cannot be found in the configuration, or is not valid.
如果我从app.config中删除该条目,它可以正常工作,但停止为已部署的应用程序工作。
有幸福的媒介吗?我假设错误的原因是因为我在我的开发机器上安装了Sql CE的合法副本,无论出于何种原因,在我的app.config中注册它会导致它中断,但我不完全理解为什么
提示?建议?
提前致谢。
答案 0 :(得分:2)
我应该多做一些搜索。我发现了问题,似乎我需要在添加之前删除提供程序。当存在真正的Sql CE安装时,它会在machine.config中注册自己,因此将其添加到app.config会导致它被注册两次。
这应该是app.config中的内容
<system.data>
<DbProviderFactories>
<remove invariant="System.Data.SqlServerCe.3.5" />
<add name="Microsoft SQL Server Compact Data Provider"
invariant="System.Data.SqlServerCe.3.5"
description=".NET Framework Data Provider for Microsoft SQL Server Compact"
type="System.Data.SqlServerCe.SqlCeProviderFactory, System.Data.SqlServerCe, Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91" />
</DbProviderFactories>
</system.data>