ASP.NET MVC 4 + Entity Framework 6 + SQL Compact Edition 4.0 развертывание без установки

asp.net-mvc-4 deployment entity-framework-6 sql-server-ce

Вопрос

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

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

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

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

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

Популярные ответы

Я думаю, что вы действительно хотите сделать, это управлять пакетами NuGet, чтобы добавить поддержку SqlServerCompact для EntityFramework. Просто щелкните правой кнопкой мыши ваши ссылки и пакеты Manager NuGet. Затем в диалоговом окне найдите SqlServerCompact. Вы ДОЛЖНЫ видеть это:

введите описание изображения здесь

Добавляя это, необходимо добавить эквивалентные строки, которые были в ответе выше. Я закончил с этим в 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>

Извините, я опаздываю на год, но, надеюсь, это помогает кому-то другому.




Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему