7

我試圖部署一個基本的MVC 4應用程序使用實體框架6(Code First)和SQL Compact 4.0 在乾淨的Windows 7安裝安裝了iis(未安裝mvc 4和sql compact 4.0)。ASP.NET MVC 4 +實體框架6 + SQL精簡版4.0部署沒有安裝

我安裝在項目db以下的NuGet包:

  • 的EntityFramework(6.0.0版-α-2)
  • EntityFramework.SqlServerCompact(6.0.0版-α-2)
  • 微軟。 AspNet.Providers(版本1.2)
  • Microsoft.AspNet.Providers.Core(版本1.2)
  • Microsoft.SqlServer.Compact(版本4.0.8876.1)

在web.config中我得到了以下配置:

<connectionStrings> 
    <add name="[Name]" connectionString="Data Source=|DataDirectory|[FileName].sdf" providerName="System.Data.SqlServerCe.4.0" /> 
</connectionStrings> 

...................... 

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, 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, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </providers> 
</entityFramework> 

Bin文件夾(SQL CE文件是在AMD64和x86文件夾:

  • [AMD64]
  • [86]
  • Antlr3.Runtime.dll
  • DotNetOpenAuth.AspNet.dll
  • DotNetOpenAuth.Core.dll
  • DotNetOpenAuth.OAuth.Consumer.dll
  • DotNetOpenAuth.OAuth.dll
  • DotNetOpenAuth.OpenId.dll
  • DotNetOpenAuth.OpenId.RelyingParty.dll
  • EntityFramework.dll
  • EntityFramework.SqlServer.dll
  • EntityFramework.SqlServer.xml
  • EntityFramework.SqlServerCompact.dll
  • EntityFramework.SqlServerCompact.xml
  • EntityFramework.xml
  • Microsoft.Web.Infrastructure.dll
  • Microsoft.Web.WebPages.OAuth.dll
  • Newtonsoft.Json.dll
  • ShipMedProto.DB。 DLL
  • ShipMedProto.DB.pdb
  • ShipMedProto.Web.dll
  • ShipMedProto.Web.pdb
  • System.ComponentModel.DataAnnotations.dll
  • System.Data.DataSetExtensions.dll
  • System.Data.SqlServerCe.dll
  • System.Data.SqlServerCe.Entity.dll
  • System.Net.Http.Formatting 。DLL
  • System.Web.Helpers.dll
  • System.Web.Http.dll
  • System.Web.Http.WebHost.dll
  • System.Web.Mvc.dll程序
  • 的System.Web。 Optimization.dll
  • System.Web.Providers.dll
  • System.Web.Razor.dll
  • System.Web.WebPages.Deployment.dll
  • System.Web.WebPages.dll
  • System.Web.WebPages.Razor.dll
  • WebActivatorEx.dll
  • WebGrease.dll
  • WebMatrix.Data.dll
  • WebMatrix.WebData.dll

當我部署到清潔機器我收到以下錯誤信息:

無法找到所需的.Net Framework數據提供程序。它可能沒有安裝。

在我的開發機器上它工作正常。 (我已經安裝了sql ce)

任何線索我在做什麼錯?

+0

確保所有必需的二進制文件都部署到bin文件夾中 – ErikEJ 2013-02-19 12:01:41

+0

我確定了這一點。你知道sqlce dll是否應該放在bin - > x86文件夾中 – oskarkvamme 2013-02-19 12:04:17

+2

是的,bin/x86文件夾中的x86 DLL和bin/AMD64文件夾中的x64 dll。您還需要dbProviders部分,請參閱我的博客文章:http://erikej.blogspot.com/2011/02/using-sql-server-compact-40-with。html – ErikEJ 2013-02-19 12:07:24

回答

1

這是我正在使用該工程的配置。

我從加入的NuGet項目: 的EntityFramework(6.0.1) EntityFramework.SqlServerCompact(6.0.1) 微軟SQL Server精簡版(4.0.8876.1)。請注意,我沒有將此程序集標記爲複製本地。

我從SQLCE 4添加的文件私人文件夾安裝

然後我把我的配置如下:

<configuration> 
    <configSections> 
    <sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"> 
     <section name="SecureSend.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </sectionGroup> 
    <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.5" /> 
    </startup> 
    <runtime> 
    <loadFromRemoteSources enabled="true" /> 
    <ThrowUnobservedTaskExceptions enabled="true" /> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <probing privatePath="bin"/> 
     <dependentAssembly> 
     <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-5.0.0.0" newVersion="6.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Data.SqlServerCe" publicKeyToken="89845dcd8080cc91" /> 
     <bindingRedirect oldVersion="0.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <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> 
    <connectionStrings> 
    <add name="LocalUserContext" connectionString="Data Source=c:\temp\LocalUserDataStore.sdf" providerName="System.Data.SqlServerCe.4.0" /> 
    </connectionStrings> 
    <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> 
</configuration> 
5

我想你真正想要做的是管理的NuGet包這樣您可以爲EntityFramework添加SqlServerCompact支持。只需右鍵單擊您的參考和經理NuGet包。然後在對話框中搜索SqlServerCompact。你應該看到這一點:

enter image description here

添加此要補充一點,是在回答上面相應的字符串。我結束了這個在web.config(或app.config中,如果你正在做一個應用程序)

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

對不起,我大概晚了一年,但希望這可以幫助別人。

+0

請記住,如果您正在部署到未安裝SQL CE的服務器,則還需要部署本機二進制文件。最簡單的方法是添加一個構建後步驟,從NuGet包NativeBinaries文件夾中複製這些步驟 – 2015-03-23 20:13:28