ventajas tutorial que mvc framework first español desventajas code c# .net entity-framework ado.net entity-framework-6

c# - tutorial - Error: no se ha encontrado ningún proveedor de Entity Framework para el proveedor de ADO.NET con el nombre invariable ''System.Data.SqlClient''



mvc entity framework español (11)

Este problema podría deberse a una referencia errónea del marco de entidad o, a veces, al nombre de clase que no coincide con el nombre de la entidad en la base de datos. Asegúrese de que el nombre de la tabla coincida con el nombre de la clase.

Recientemente actualicé / actualicé Entity Framework en un proyecto anterior de la versión 4 o 5 a la versión 6. Ahora obtengo esta excepción:

Se produjo una excepción del tipo ''System.InvalidOperationException'' en EntityFramework.dll pero no se manejó en el código de usuario

Información adicional: no se encontró ningún proveedor de Entity Framework para el proveedor ADO.NET con el nombre invariable ''System.Data.SqlClient''. Asegúrese de que el proveedor esté registrado en la sección ''entityFramework'' del archivo de configuración de la aplicación. Consulte http://go.microsoft.com/fwlink/?LinkId=260882 para obtener más información.

Busqué en Google el error y encontré un par de hilos SO, pero ninguno de ellos contenía una solución que me funcionara. Así es como se ve mi App.config:

<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework> </configuration>

Ya desinstalé Entity Framework de mi proyecto y lo reinstalé, borré todas las referencias a los viejos archivos EF y volví a instalar, pero nada funciona para mí. Sigo recibiendo este error.


He resuelto el problema usando el código siguiente en mi DBContext

public partial class Q4Sandbox : DbContext { public Q4Sandbox() : base("name=Q4Sandbox") { } public virtual DbSet Employees { get; set; } protected override void OnModelCreating(DbModelBuilder modelBuilder) { var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance; } }

Gracias a un miembro SO.


Intente agregar los siguientes enlaces de ensamblaje en tiempo de ejecución:

<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="EntityFramework" publicKeyToken="b77a5c561934e089" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime>


La respuesta de Hendry es 100% correcta. Tuve el mismo problema con mi aplicación, donde hay un proyecto de repositorio que trata de la base de datos con el uso de métodos que encapsulan la operación de contexto EF db. Otros proyectos usan este repositorio, y no quiero hacer referencia a EF en esos proyectos. De alguna manera, no creo que sea correcto, solo necesito EF en el proyecto de repositorio. De todos modos, copiar EntityFramework.SqlServer.dll a otro directorio de salida del proyecto resuelve el problema. Para evitar problemas, cuando te olvides de copiar este dll, puedes cambiar el directorio de compilación del repositorio. Vaya a las propiedades del proyecto del repositorio, seleccione la pestaña Generar, y en la sección de salida puede establecer el directorio de salida en el directorio de compilación de otro proyecto. Claro, es solo una solución. Tal vez el truco, mencionado en algún lugar, es mejor:

var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;

Aún así, para fines de desarrollo es suficiente. Más tarde, al preparar la instalación o publicación, puede agregar este archivo al paquete.

Soy bastante nuevo en EF. ¿Hay algún método mejor para resolver este problema? No me gusta "hackear", me hace sentir que hay algo que "no es seguro".


Lo acabo de resolver. Necesita volver a instalar Entity Framework en su solución. Sigue cualquiera de los enfoques.

Primero = Haga clic con el botón derecho en su Solución o Proyecto raíz y haga clic en Manage NuGet Packages . Seleccione ''EntityFramework'', seleccione los proyectos apropiados y haga clic en Aceptar.

o

Segundo = Vaya a Console Package Manager y ejecute Install-Package EntityFramework .

Espero eso ayude.


Lo que funcionó para mí fue la degradación de EF 6.1.3 a EF 6.1.1 .

En Visual Studios 2012+ diríjase a:

Herramientas - Nuget Package Manager - Package Manager Console`

Luego ingrese:

Install-Package EntityFramework.SqlServerCompact-Version 6.1.1

No tuve que desinstalar EF 6.1.3 primero porque el comando anterior ya lo hace.

Además, no sé si hizo algo, pero también instalé SQL Server CE en mi proyecto.

Aquí está el enlace a la solución que encontré:

http://www.itorian.com/2014/11/no-entity-framework-provider-found-for.html


Ok, esto es bastante extraño. Tengo un par de proyectos: uno es un proyecto de UI (un proyecto ASP.NET MVC) y los otros son proyectos para cosas como repositorios. El proyecto de repositorios tenía una referencia a EF, pero el proyecto de IU no (porque no lo necesitaba, solo necesitaba hacer referencia a los otros proyectos). Después de que instalé EF para el proyecto UI también, todo comenzó a funcionar. Por eso, agregó este fragmento de código a mi Web.config:

<entityFramework> <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> </providers> </entityFramework>


También tuve un problema similar

Mi problema se resolvió haciendo lo siguiente:


Tengo el mismo problema, la diferencia es que no tengo acceso al código fuente. Solucioné el problema al colocar la versión correcta de EntityFramework.SqlServer.dll en el directorio bin de la aplicación.


Tuve el mismo problema y lo único que funcionó para mí fue desinstalar el paquete de marco de entidad de cada proyecto usando Uninstall-Package. Y luego instálelo de nuevo en la solución completa. Le pedirá que elija en qué proyecto desea instalarlo, debe seleccionar todo.


Tuve este problema en una situación en la que tengo un proyecto modelo que tiene referencias tanto para EntityFramework como para los ensamblados .SqlServer, y un proyecto de IU separado que usa ASP.NET MVC. Quería actualizar de EF 4.1 a 6.1. De hecho, tuve que hacer parte de lo que se describió aquí: http://robsneuron.blogspot.com/2013/11/entity-framework-upgrade-to-6.html . Quiero enfatizar que no agregué una referencia a estos proyectos a mi proyecto de interfaz de usuario ni agregué la configuración a la web.config del proyecto de interfaz de usuario, ya que esos pasos violarían mi separación de preocupaciones.

Lo que sí hice fue en mi proyecto modelo, tuve que voltear la configuración de referencia "Copiar local" para EntityFramework.SqlServer (y la referencia de EntityFramework, para estar seguro) a "False" y guardar todo, para que el proyecto pusiera el Nodo <Private> en el archivo .csproj, y luego configúrelo de nuevo en "Verdadero" y guarde de nuevo, para que True finalice como el valor final.

También tuve que agregar la línea de DbContext a mi clase DbContext en su constructor para forzar el uso del ensamblado, aunque la línea no hace nada. Estos dos pasos los aprendí en la publicación del blog.

public MyContext : DbContext { public MyContext() : base("name=MyContext") { // the terrible hack var ensureDLLIsCopied = System.Data.Entity.SqlServer.SqlProviderServices.Instance; }

Quiero agradecer al autor de ese blog al que hice referencia, así como a todas las personas que hicieron y respondieron las preguntas en SO, para tratar de ayudarnos a superar este terrible error.