7

Я пытаюсь развернуть базовое приложение MVC 4, которое использует Entity Framework 6 (Code First) и SQL Compact 4.0 на чистой установке Windows 7 с установленным iis (mvc 4 и sql compact 4.0 не установлены).ASP.NET MVC 4 + Entity Framework 6 + SQL Compact Edition 4.0 развертывание без установки

Я получил следующие NuGet пакеты, установленные на проекте дб:

  • EntityFramework (версия 6.0.0-альфа2)
  • EntityFramework.SqlServerCompact (версия 6.0.0-альфа2)
  • Microsoft. 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]
  • [x86]
  • 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. длл
  • 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 ,длл
  • 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. Он не может быть установлен.

На моей машине dev она работает нормально. (Я установил sql ce)

Любые подсказки, что я делаю неправильно?

+0

Убедитесь, что все необходимые двоичные файлы развернуты в папку bin – ErikEJ

+0

. Я сделал это. Знаете ли вы, что dll sqlce следует поместить в папку bin -> x86 – oskarkvamme

+2

Да, x86 DLL в папке bin/x86 и x64 dll в папке bin/AMD64. Вам также нужен раздел dbProviders, см. Мой блог здесь: http://erikej.blogspot.com/2011/02/using-sql-server-compact-40-with.html – ErikEJ

ответ

1

Это конфигурация, которую я использую, что работает.

Я добавил проекты из NuGet: EntityFramework (6.0.1) EntityFramework.SqlServerCompact (6.0.1) Microsoft SQL Server Compact Edition (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 так что вы добавляете поддержку SqlServerCompact для EntityFramework. Просто щелкните правой кнопкой мыши ваши ссылки и пакеты Manager 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, вам также необходимо развернуть собственные двоичные файлы. Самый простой способ - добавить шаг после сборки, чтобы скопировать их из папки NativeBinaries пакета NuGet –

 Смежные вопросы

  • Нет связанных вопросов^_^