7

Próbuję wdrożyć podstawową aplikację MVC 4, która używa Entity Framework 6 (Code First) i SQL Compact 4.0 na czystej instalacji systemu Windows 7 z zainstalowaną iis (nie zainstalowano mvc 4 i sql compact 4.0).ASP.NET MVC 4 + Entity Framework 6 + instalacja SQL Compact Edition 4.0 bez instalacji

mam następujące pakiety Nuget zainstalowane w ramach projektu DB:

  • EntityFramework (wersja 6.0.0-alfa 2)
  • EntityFramework.SqlServerCompact (wersja 6.0.0-alfa 2)
  • Microsoft. AspNet.Providers (wersja 1,2)
  • Microsoft.AspNet.Providers.Core (wersja 1,2)
  • Microsoft.SqlServer.Compact (wersja 4.0.8876.1)

W web.config mam następujący 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> 

folderu Bin (plików SQL CE są w folderze amd64 oraz 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. 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

Kiedy wdrożyć do na czystej maszynie pojawia się następujący komunikat o błędzie:

Nie można znaleźć żądanego dostawcy danych .Net Framework. To może nie być zainstalowane.

Na moim komputerze dev działa dobrze. (Mam zainstalowany sql ce)

Każda wskazówka co robię źle?

+0

Upewnij się, że wszystkie wymagane pliki binarne są wdrożone w folderze bin – ErikEJ

+0

Wyjaśniłem to. Czy wiesz, jeśli biblioteki sqlce powinny być umieszczone w folderze bin -> x86 – oskarkvamme

+2

Tak, biblioteki DLL x86 w folderze bin/x86 i pliki DLL x64 w folderze bin/AMD64. Potrzebujesz również sekcji dbProviders, zobacz mój post na blogu tutaj: http://erikej.blogspot.com/2011/02/using-sql-server-compact-40-with.html – ErikEJ

Odpowiedz

1

Jest to konfiguracja, której używam, która działa.

Dodałem projektów z Nuget: EntityFramework (6.0.1) EntityFramework.SqlServerCompact (6.0.1) Microsoft SQL Server Compact Edition (4.0.8876.1). Uwaga: nie mam takiego zestawu flagowanego do skopiowania lokalnego.

Dodałem pliki z SQLCE 4 prywatny zainstalować foldery

A potem mogę ustawić config następująco:

<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

myślę, co naprawdę chcesz zrobić to zarządzać pakiety Nuget tak, że dodajesz obsługę SqlServerCompact dla EntityFramework. Kliknij prawym przyciskiem myszy swoje referencje i pakiety Manager NuGet. Następnie w oknie dialogowym wyszukaj element SqlServerCompact. Powinieneś zobaczyć:

enter image description here

Dodanie tego należy dodać równoważne strun, które były w odpowiedzi powyżej. Skończyło się to w pliku web.config (lub app.config jeśli robisz aplikację)

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

Przepraszam, jestem o rok późno, ale mam nadzieję, że to pomoże ktoś inny.

+0

Należy pamiętać, że jeśli wdrażasz serwer bez zainstalowanego środowiska SQL CE, musisz również wdrożyć natywne pliki binarne. Najprostszym sposobem jest dodanie etapu post-build do skopiowania ich z folderu NativeBinaries pakietu NuGet –

Powiązane problemy