繁体   English   中英

实体Framewok代码首先使用本地SQL Server CE DLL“找不到ADO.NET提供程序”

[英]Entity Framewok Code First “ADO.NET provider not found” with local SQL Server CE DLL's

我正在编写一个使用SQL Server CE 4.0文件的C#应用​​程序,这些文件可以通过代码优先通过Entity Framework 6.0访问。 (应用程序需要能够使用本地dll进行SQL Server CE连接,即应用程序需要可以部署XCOPY)。 应用程序在我的开发机器上运行正常,但在其他机器上(例如只有Win7和.NET 4.0的VM),我得到一个ArgumentException

具有不变名称“System.Data.SqlServerCe.4.0”的ADO.NET提供程序未在计算机或应用程序配置文件中注册,或者无法加载。 有关详细信息,请参阅内部异常

内部异常消息说:

无法找到请求的.Net Framework数据提供程序。 它可能没有安装。

我搜索过Google和SO,大多数评论表明确保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" />
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0" />
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="System.Data.SqlServerCe.4.0" />
      </parameters>
    </defaultConnectionFactory>
    <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>
  </entityFramework>
</configuration>

build文件夹包含以下文件(当然还有特定于应用程序的文件):

  • EntityFramework.dll
  • EntityFramework.xml
  • EntityFramework.SqlServer.dll
  • EntityFramework.SqlServer.xml
  • EntityFramework.SqlServerCompact.dll
  • EntityFramework.SqlServerCompact.xml

在每个amd64和x86子文件夹中都有以下文件:

  • sqlceca40.dll
  • sqlcecompact40.dll
  • sqlceer40EN.dll
  • sqlceme40.dll
  • sqlceqp40.dll
  • sqlcese40.dll

我确定该程序在开发机器上运行,因为已经安装了SQL Server CE,但是如何在其他机器上使用本地SQL Server CE dll来运行它?

http://tech.aendeavors.com/2011/06/09/bin-deploy-sqlce-4-0-and-ef-4-1/

您可能缺少的相关内容似乎是:

  • 确保引用System.Data.SqlServerCe并在属性中将其设置为“Copy local”。

  • 将以下内容添加到app.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.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91"/>
    </DbProviderFactories>
</system.data>

我今天面临同样的问题。
重新安装EF几次后,解决了我的问题是在我的Console项目中引用EF以及DAL项目(实际使用EF的项目)。

如果您使用的引用又引用了EF,您还必须将它添加到此项目中。

对于迟到的回复感到抱歉 - 实际上,有一个非常简单的解决方案:

如果您调查packages \\ EntityFramework.6.1.3 \\ lib \\ net45文件夹,您会注意到还有另一个已经存在的dll - EntityFramework.SqlServer。

只需添加一个引用,一切都会工作。

我有同样的问题,没有什么对我有用。 解决我这个问题的唯一办法是从我的机器上卸载SQL Server Compact (通过添加/删除程序)并重新安装它。

在我的情况下,“EntityFramework.SqlServerCompact”包丢失了。 只是想分享,如果它可以节省一个人的一天!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM