Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架代码优先”;“未找到ADO.NET提供程序”;使用本地SQL Server CE DLL';s_C#_.net_Entity Framework_Ef Code First_Sql Server Ce - Fatal编程技术网

C# 实体框架代码优先”;“未找到ADO.NET提供程序”;使用本地SQL Server CE DLL';s

C# 实体框架代码优先”;“未找到ADO.NET提供程序”;使用本地SQL Server CE DLL';s,c#,.net,entity-framework,ef-code-first,sql-server-ce,C#,.net,Entity Framework,Ef Code First,Sql Server Ce,我正在编写一个C#应用程序,它使用SQL Server CE 4.0文件,通过Entity Framework 6.0首先通过代码访问这些文件。(应用程序需要能够为SQL Server CE连接使用本地dll,即应用程序需要是XCOPY可部署的)。该应用程序在我的开发机器上运行良好,但在其他机器上(例如,只有Win7和.NET 4.0的VM),我得到一个ArgumentException: 具有固定名称“System.Data.SqlServerCe.4.0”的ADO.NET提供程序未在计算机或

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

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

内部异常消息显示:

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

我搜索过谷歌,大多数评论都表明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>

构建文件夹包括以下文件(当然,除了特定于应用程序的文件外):

  • 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来运行它?

请参阅

您可能缺少的相关信息如下:

  • 确保System.Data.SqlServerCe被引用并设置为“复制” “本地”属性

  • 将以下内容添加到app.config:



我今天也面临同样的问题。
在多次重新安装EF之后,解决问题的方法是在控制台项目中引用EF以及DAL项目(实际使用EF的项目)


如果您使用的引用反过来引用了EF,那么您也必须将其添加到此项目中。

我也遇到了同样的问题,但没有任何效果。对我来说,解决这个问题的唯一办法是从我的机器上卸载SQL Server Compact(通过添加/删除程序)并重新安装。

很抱歉响应太晚-实际上,有一个非常简单的解决方案:

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


只需添加一个引用,一切都将正常工作

在我的例子中,缺少“EntityFramework.SqlServerCompact”包。只是想和大家分享一下,以防它能拯救别人的一天

ErikEJ:我错过了你的评论,去看了回复,但看起来你也有答案。对于任何从头开始的人来说,这看起来像是一个完整的教程。@ErikEJ升级到.net framework 4.5.2后,项目将中断。p、 s我下载了你的项目,这会产生同样的错误too@Shekhar“休息”?-你使用了我更新的方法吗?@ErikEJ不,我没有,看起来可能有用。thanksI返回并检查了这一点,并(通过NuGet)向每个程序集添加了EntityFramework和EntityFramework SQL Server Compact。然而,这并没有解决它。在我根据nekno的评论添加到App.Config文件后,它就成功了。我想这两个都是必需的,但我没有返回并撤消以确保。@Tim,我忘记了
App.config
。你完全正确!我回去查看了Tico评论中的参考资料(见我的回复),但没有效果。将您的建议添加到App.Config文件确实解决了这个问题,但我认为两者都是必要的(链接的文章没有指定哪些程序集需要引用)。对于任何想知道的人(我不太喜欢App.Config文件),这个直接放在里面。我可以再次代表我确认上面的评论。同样的事情再次发生在我身上,因为我不得不删除并重新安装.NET目标包,它把我所有的Visual Studio项目都搞砸了。同样,唯一有效的方法是卸载SQL Server Compact并重新安装它。
<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>