entity-framework c#-4.0 sql-server-ce

No se ha encontrado ningún proveedor de Entity Framework para el proveedor de ADO.NET con el nombre invariable ''System.Data.SqlServerCe.4.0''



entity-framework c#-4.0 (10)

Obtuve el siguiente error cuando utilicé sqlce 4.0 con entityframework 6.0

No Entity Framework provider found for the ADO.NET provider with invariant name ''System.Data.SqlServerCe.4.0''

Mi app.config se parece a esto

.... <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" requirePermission="false" /> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, 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" /> </providers--> </entityFramework> <connectionStrings> <add name="FbMultipleInsOrderContainer" connectionString="metadata=res://*/FbMultipleInsOrder.csdl|res://*/FbMultipleInsOrder.ssdl|res://*/FbMultipleInsOrder.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;data source=|DataDirectory|/FBMultipleOrderSync.sdf&quot;" providerName="System.Data.EntityClient" /> </connectionStrings> ...

Intenté volver a instalar EF 6. Pero no sirvió.

Cualquier pista sobre esto sería muy apreciable.


¡No olvide que Package Manager Console toma app.config / web.config de seleccionado como proyecto de inicio!


Después de instalar el paquete EntityFramework.SqlServerCompact EntityFramework.SqlServerCompact, compruebe que su app.config contiene lo siguiente (según el comentario de @ ErikEJ anterior):

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

(Puede dejar la línea para SqlClient aunque realmente no lo necesite).


Encontré el problema en mis pruebas unitarias. Lo complicado fue que el error no apareció constantemente. Logré resolverlo agregando la siguiente clase de mi solución de pruebas unitarias:

public static class Trick { public static void FixEfProviderServicesProblem() { // this commented line should be used for SQL Server provider //var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance; // this is used for SQL Server CE provider var instance = System.Data.Entity.SqlServerCompact.SqlCeProviderServices.Instance; } }


ErikEJ lo ha señalado, pero me gustaría destacar el hecho, DEBES recordar instalar el paquete Nuget

EntityFramework.SqlServerCompact

Intenté seguir la respuesta recomendada, pero no me di cuenta de que no tenía el paquete NuGet requerido al que se refería App.config.


Este error surgió en una PC de usuario. El usuario ignoró un error anterior "La sección ''DbProviderFactories'' solo puede aparecer una vez por archivo de configuración".

Aparentemente, DB2 corrompió el archivo de configuración del equipo en su PC, agregando una etiqueta duplicada (y vacía) <DbProviderFactories /> .

La solución fue eliminar la etiqueta duplicada vacía. El archivo de configuración de la máquina se encuentra en [WindowsDir] / Microsoft.Net / Framework [.NET Version] / Config / Machine.config


Mi problema fueron las pruebas unitarias. Es probable que solo haya instalado el marco de la Entidad para su proyecto, pero no las pruebas de su unidad. Para hacerlo:

Haga clic con el botón derecho en "Solución" en el Explorador de soluciones (no en el nombre de su proyecto)

Haga clic en "Administrar paquetes NuGet"

Busque EntityFramework y presione

Probablemente no verá una marca al lado de [Nombre del proyecto]. Pruebas


Para lograr esto, solo necesita registrar EntityFramework.SqlServerCompact en la EntityFramework.SqlServerCompact de Package Manager,

Para hacer esto, abra la consola del administrador de energía y escriba debajo del comando:

PM> Install-Package EntityFramework.SqlServerCompact


Para mí, como el programador no es solo uno, algún programador ya instaló EntityFramework.SqlServerCompact, pero cuando selecciono mi PC y RUN muestra el mensaje de error anterior, simplemente desinstalo e instalo de nuevo.


Para resolver este problema

Menú de Visual Studio -> Herramientas -> Administrador de paquetes NuGet -> Administrar paquetes de NuGet para la solución

Seleccione la pestaña ''Examinar'' y busque '' EntityFramework.SqlServerCompact '' siguiente

Instalarlo.

Deberia de funcionar.


la solución provista es correcta pero no explica por qué EF necesita este ensamblaje. Aquí está el por qué ...

Por defecto, la configuración de EF le permite tener una sección "defaultConnectionFactory" uder entityFramework. Esta fábrica predeterminada está configurada para "LocalDbConnectionFactory" y su parámetro es "mssqllocaldb".

Esta fábrica requiere internamente "SqlServerCe.4.0", es decir, "SqlServerCompact".

El error ocurre solo si EF usa su cadena de conexión predeterminada en DbContext. Si EF se proporciona con alguna otra cadena de conexión especificada en su configuración, este error no aparece. Porque EF usa de forma predeterminada la fábrica de conexiones predeterminada.

una vez que instale "SqlServerCe 4.0" la configuración de EF se cambia y "LocalDbConnectionFactory" y su parámetro "mssqllocaldb" se reemplazan por "SqlServer Ce 4.0". y el tiempo de ejecución de EF también puede encontrar el ensamblado SqlServerCe4.0 (ya que ahora forma parte de sus referencias y se coloca físicamente en su BIN).

A continuación se muestra la configuración de EF antes y después de instalar Sql Server Compact

Configuración VIEJA:

<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> <parameters> <parameter value="mssqllocaldb" /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>

La nueva configuración es la siguiente:

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

y también agregó la siguiente sección para describir la nueva fábrica

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