ASP.NET MVC 4 + Entity Framework 6 + SQL Compact Edition 4.0 implementación sin instalación

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

Pregunta

Estoy intentando implementar una aplicación MVC 4 básica que utiliza Entity Framework 6 (Code First) y SQL Compact 4.0 en una instalación limpia de Windows 7 con iis instalado (mvc 4 y sql compact 4.0 no están instalados).

Conseguí los siguientes paquetes nuget instalados en el proyecto db:

  • EntityFramework (versión 6.0.0-alpha2)
  • EntityFramework.SqlServerCompact (versión 6.0.0-alpha2)
  • Microsoft.AspNet.Providers (Versión 1.2)
  • Microsoft.AspNet.Providers.Core (Versión 1.2)
  • Microsoft.SqlServer.Compact (Versión 4.0.8876.1)

En web.config tengo la siguiente configuración:

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

Carpeta bin (los archivos sql ce están en las carpetas amd64 y 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

Cuando implemento en la máquina limpia, aparece el siguiente mensaje de error:

No se puede encontrar el proveedor de datos de .Net Framework solicitado. Puede que no esté instalado.

En mi máquina dev está funcionando bien. (Tengo instalado sql ce)

¿Alguna pista de lo que estoy haciendo mal?

Respuesta popular

Creo que lo que realmente quiere hacer es administrar los paquetes de NuGet de manera que agregue el soporte de SqlServerCompact para EntityFramework. Simplemente haz clic derecho en tus referencias y en los paquetes Manager NuGet. Luego, en el diálogo, haga una búsqueda de SqlServerCompact. Deberías ver esto:

introduzca la descripción de la imagen aquí

Agregar esto debería agregar las cadenas equivalentes que estaban en la respuesta anterior. Terminé con esto en el web.config (o app.config si estás haciendo una aplicación)

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

Lo siento, llego un año tarde pero espero que esto ayude a alguien más.




Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué