Entity Framework 6.1.3 和 SQL Server CE 4.0 - 未找到 Entity Framework 提供程序

Entity Framework 6.1.3 and SQL Server CE 4.0 - No Entity Framework provider found

问题: 我有一个网站正在使用我的本地开发机器(安装了 VS2013、EF6.1.3、SQl Server CE 4.0、EF 工具)。我在本地和 VS OnLine 中使用 git 存储库维护网站。

我在不同的(临时)位置使用新机器。我将网站从我的 git 存储库中提取到这台新机器上。一切似乎都正常(可以使用模型中的实体在代码中看到智能感知)。 SQL CE 4.0 数据库 (StarterSite) 在 SQL CE 工具箱中运行良好。我可以看到模型 (edmx) 中的实体,最初是使用数据库优先方法构建的。

然而,当我尝试从 SQL CE 4.0 数据库更新模型时,出现了这个错误: "An exception of type 'System.ArgumentException' occurred while attempting to update from the database. The exception message is: 'Unable to convert runtime connection string to its design-time equivalent. The libraries required to enable Visual Studio to communicate with the database for design purposes (DDEX provider) are not installed for provider 'System.Data.SqlServerCe.4.0'. Connection string: Data Source="C:\Users\\Documents\Visual 工作室 2013\WebSites\NakedEF\App_Data\StarterSite.sdf"'".

我似乎无法让我的 Ef 6.1.3 模型工作。我一直收到那个错误。当我尝试 运行 网站时,我得到一个元数据异常: 'System.Data.Entity.Core.MetadataException' 类型的异常发生在 mscorlib.dll 中,但未在用户代码中处理。
附加信息:指定的架构无效。错误: App_Code.Model.ssdl(2,2):错误 0152:未找到具有固定名称 'System.Data.SqlServerCe.4.0' 的 ADO.NET 提供程序的 Entity Framework 提供程序。确保提供程序已在应用程序配置文件的 'entityFramework' 部分中注册。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882。 但是我已经通过 nuget 安装了提供程序: 并将其包含在我的 entityFramework 部分(请参阅下面的 web.config 摘录)

出于好奇,我建立了一个新网站(razor3 模板)并向该网站添加了一个实体模型。工作顺利。

环境 在这台新机器上我有 VS 2013 我已经在机器上安装了Entity Framework Tools 6.1.3, 我使用 nuget 安装 EF 6.1.3、EF SQL Server CE 4.0 提供程序和 SQL Server CE 4.0.

这是 package.config 的网站,其中 EF 和 SQL CE 不工作:

    <packages>

      <package id="DotNetOpenAuth.AspNet" version="4.1.4.12333" targetFramework="net
    45" />

      <package id="DotNetOpenAuth.Core" version="4.1.4.12333" targetFramework="net45
    " />

      <package id="DotNetOpenAuth.OAuth.Consumer" version="4.1.4.12333" targetFramew
    ork="net45" />

      <package id="DotNetOpenAuth.OAuth.Core" version="4.1.4.12333" targetFramework=
    "net45" />

      <package id="DotNetOpenAuth.OpenId.Core" version="4.1.4.12333" targetFramework
    ="net45" />
      <package id="DotNetOpenAuth.OpenId.RelyingParty" version="4.1.4.12333" targetF
    ramework="net45" />

      <package id="EntityFramework" version="6.1.3" targetFramework="net45" />

      <package id="EntityFramework.SqlServerCompact" version="6.1.3" targetFramework
    ="net45" />

      <package id="jQuery" version="1.10.2" targetFramework="net45" />


      <package id="jQuery.UI.Combined" version="1.10.3" targetFramework="net45" />


      <package id="jQuery.Validation" version="1.11.1" targetFramework="net45" />

      <package id="knockoutjs" version="2.3.0" targetFramework="net45" />

      <package id="Microsoft.AspNet.Razor" version="3.2.2" targetFramework="net45" /
    >

      <package id="Microsoft.AspNet.Web.Optimization" version="1.1.3" targetFramewor
    k="net45" />

      <package id="Microsoft.AspNet.WebPages" version="3.2.2" targetFramework="net45
    " />

      <package id="Microsoft.AspNet.WebPages.Data" version="3.2.2" targetFramework="
    net45" />

      <package id="Microsoft.AspNet.WebPages.OAuth" version="3.2.2" targetFramework=
    "net45" />

      <package id="Microsoft.AspNet.WebPages.WebData" version="3.2.2" targetFramewor
    k="net45" />

      <package id="Microsoft.jQuery.Unobtrusive.Validation" version="3.2.2" targetFr
    amework="net45" />

      <package id="Microsoft.SqlServer.Compact" version="4.0.8876.1" targetFramework
    ="net45" />

      <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="
    net45" />

      <package id="Modernizr" version="2.6.2" targetFramework="net45" />

      <package id="RestSharp" version="105.0.1" targetFramework="net45" />

      <package id="Twilio" version="3.6.29" targetFramework="net45" />

      <package id="Twilio.WebMatrix" version="3.1.4" targetFramework="net45" />

      <package id="WebGrease" version="1.5.2" targetFramework="net45" />

    </packages>

相关bin目录内容

    /bin/EntityFramework.dll

    /bin/EntityFramework.SqlServer.dll

    /bin/EntityFramework.SqlServerCompact.dll

    /bin/System.Data.SqlServerCe.dll

相关web.config设置:

<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>

<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlCeConnectionFactory, EntityFramework">

  <parameters>

    <parameter value="System.Data.SqlServerCe.4.0" />

  </parameters>

</defaultConnectionFactory>

<providers>

  <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />

</providers>

<connectionStrings>

<add name="StarterSite" connectionString="Data Source=|DataDirectory|\StarterSite.sdf" providerName="System.Data.SqlServerCe.4.0" />

  <add name="ModelEntities" connectionString="metadata=res://*/App_Code.Model.csdl|res://*/App_Code.Model.ssdl|res://*/App_Code.Model.msl;provider=System.Data.SqlServerCe.4.0;provider connection string='Data Source=&quot;C:\Users\<MyUserName>\Documents\Visual Studio 2013\WebSites\NakedEF\App_Data\StarterSite.sdf&quot;'" providerName="System.Data.EntityClient" />


帮助请求: 当我接触到这些程序集、引用和 dll 时,我很快就不知所措了。

我在这里做错了什么?有人可以帮我让这个网站在新机器上工作吗(我无法回到原来的开发机和 运行 那里的克隆。

您需要在新的开发机器上安装 SQL Server Compact Toolbox,它会为您安装 DDEX 提供程序。 (您可能必须转到工具箱中的“关于”屏幕并单击 DDEX 安装按钮,然后重新启动 VS)