first - No se ha encontrado ningún proveedor de Entity Framework para el proveedor de ADO.NET con el nombre invariable ''System.Data.SqlClient''
entity framework example (30)
Añade esta función
private void FixEfProviderServicesProblem()
a la clase de contexto de la base de datos en la clase de la biblioteca y la DLL EntityFramework.SqlServer.dll faltante se copiarán en los lugares correctos.
namespace a.b.c
{
using System.Data.Entity;
public partial class WorkflowDBContext : DbContext
{
public WorkflowDBContext()
: base("name=WorkflowDBConnStr")
{
}
public virtual DbSet<WorkflowDefinition> WorkflowDefinitions { get; set; }
public virtual DbSet<WorkflowInstance> WorkflowInstances { get; set; }
public virtual DbSet<EngineAlert> EngineAlerts { get; set; }
public virtual DbSet<AsyncWaitItem> AsyncWaitItems { get; set; }
public virtual DbSet<TaskItem> TaskItems { get; set; }
public virtual DbSet<TaskItemLink> TaskItemLinks { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
}
private void FixEfProviderServicesProblem()
{
// The Entity Framework provider type ''System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer''
// for the ''System.Data.SqlClient'' ADO.NET provider could not be loaded.
// Make sure the provider assembly is available to the running application.
// See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
}
}
.
Después de descargar el EF6 de nuget e intentar ejecutar mi proyecto, devuelve el siguiente error:
No se ha encontrado ningún proveedor de Entity Framework para el proveedor de 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.
Acabo de reinstalar Entity Framework usando Nuget. Y siga las instrucciones escritas en el siguiente enlace: http://robsneuron.blogspot.in/2013/11/entity-framework-upgrade-to-6.html
Creo que el problema se resolverá.
Acabo de tener el mismo problema y parece que EntityFramework, aunque se instaló desde NuGet Package Manager, no se instaló correctamente en el proyecto.
Logré arreglarlo ejecutando el siguiente comando en la Consola de Package Manager :
PM> Install-Package EntityFramework
Además, asegúrese de que el proyecto de inicio sea el proyecto que contiene su dbcontext (o app.config relevante). El mío estaba intentando iniciar un proyecto de sitio web que no tenía todos los ajustes de configuración necesarios.
Agregue a continuación a su app.config.
<entityFramework>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
<parameters>
<parameter value="v11.0" />
</parameters>
</defaultConnectionFactory>
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
Como el mensaje muestra que debemos agregar el proveedor System.Data.SqlClient, es por eso que necesitamos instalar el paquete nuget de EntityFramework que tiene dos dll, pero si estamos desarrollando solo una aplicación de consola, solo necesitamos agregar una referencia de EntityFramework.SqlServer.dll
Cuando el error ocurre en los proyectos de prueba, la solución más bonita es decorar la clase de prueba con:
[DeploymentItem("EntityFramework.SqlServer.dll")]
Cuando instala Entity Framework 6 a través de Nuget
. EntityFramework.SqlServer alguna vez se pierde por otro ejecutable. Simplemente agrega el paquete Nuget
a ese proyecto.
A veces lo anterior no funciona para Test Project
Para resolver este problema en el Proyecto de Prueba, simplemente coloque este Método dentro del Proyecto de Prueba:
public void FixEfProviderServicesProblem()
{
var instance = System.Data.Entity.SqlServer.SqlProviderServices.Instance;
}
Nunca se ha llamado a este método, pero según mis observaciones, el compilador eliminará todos los ensamblajes "innecesarios" y, sin usar el EntityFramework.SqlServer
la prueba falla.
Debe forzar una referencia estática al ensamblado EntityFramework.SqlServer.dll , pero en lugar de poner un código ficticio, puede hacerlo de una manera más hermosa:
Si ya tienes una clase DbConfiguration :
public class MyConfiguration : DbConfiguration { public MyConfiguration() { this.SetProviderServices(System.Data.Entity.SqlServer.SqlProviderServices.ProviderInvariantName, System.Data.Entity.SqlServer.SqlProviderServices.Instance); } }
Si no tiene una clase DbConfiguration , debe poner el siguiente código al inicio de la aplicación (antes de usar EF):
static MyContext() { DbConfiguration.Loaded += (sender, e) => e.ReplaceService<DbProviderServices>((s, k) => System.Data.Entity.SqlServer.SqlProviderServices.Instance); }
El proyecto de inicio que hace referencia al proyecto donde se está utilizando Entity Framework necesita los siguientes dos ensamblajes en su carpeta bin:
- EntityFramework.dll
- EntityFramework.SqlServer.dll
Agregar una <section>
a las <configSections>
de <configSections>
del archivo .config en el proyecto de inicio hace que el primer ensamblaje esté disponible en ese directorio bin. Puede copiar esto desde el archivo .config de su proyecto de Entity Framework:
<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>
Para hacer que el segundo .dll esté disponible en la carpeta bin, aunque no sea práctico, se puede hacer una copia manual de la carpeta bin del proyecto Entity Framework. Una mejor alternativa es agregar al Proyecto de Entity Framework de Entity Framework las siguientes líneas, que automatizarán el proceso:
cd $(ProjectDir)
xcopy /y bin/Debug/EntityFramework.SqlServer.dll ../{PATH_TO_THE_PROJECT_THAT_NEEDS_THE_DLL}/bin/Debug/
Eliminar la carpeta BIN lo hizo por mí
En lugar de agregar EntityFramework.SqlServer al proyecto host, puede asegurar una referencia estática a su proyecto de modelo / entidad como este
static MyContext()
{
var type = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
if(type == null)
throw new Exception("Do not remove, ensures static reference to System.Data.Entity.SqlServer");
}
Esto hará que el proceso de compilación incluya el ensamblaje con el proyecto host.
Más información en mi blog http://andersmalmgren.com/2014/08/20/implicit-dependencies-and-copy-local-fails-to-copy/
En mi caso, todo funcionó correctamente y luego, de repente, dejó de funcionar porque creo que Resharper alteró algunos cambios que causaron el problema. Mi proyecto se dividió en la capa de datos, el servicio y la capa de presentación. Tenía Entity Framework instalado y referenciado en mi capa de datos, pero aún así el error no desapareció. Desinstalar y reinstalar tampoco funcionó. Finalmente, lo resolví convirtiendo la capa de datos en el proyecto de Inicio, haciendo la migración, actualizando la base de datos y cambiando el proyecto de Inicio a mi capa de presentación .
Expanda el archivo YourModel.edmx y abra la clase YourModel.Context.cs en YourModel.Context.tt.
Agregué la siguiente línea en la sección de uso y el error fue corregido para mí.
using SqlProviderServices = System.Data.Entity.SqlServer.SqlProviderServices;
Es posible que deba agregar esta línea al archivo cada vez que se genere automáticamente.
Has agregado EF a un proyecto de biblioteca de clases. También debe agregarlo al proyecto que lo referencia (su aplicación de consola, sitio web o lo que sea).
Me acabo de encontrar con este problema hoy. Tengo una biblioteca de clases de repositorio de datos con el paquete EF63 NuGet y la aplicación de consola para pruebas, que hacen referencia solo al proyecto de biblioteca de clases. Creé un comando posterior a la compilación muy simple, que copia EntityFramework.SqlServer.dll desde la carpeta Bin / Debug de la biblioteca de clases a la carpeta Bin / Debug de la aplicación de la consola y el problema se resolvió. No olvide agregar la sección entityFramework al archivo .config de la aplicación de consola.
Ninguno de estos funcionó para mí. Encontré la solución en otra pregunta de . Lo agregaré aquí para una fácil referencia:
Debe hacer una referencia, por lo que se copiará en la ruta de la aplicación den. Porque más adelante se hará referencia en tiempo de ejecución. Así que no necesitas copiar ningún archivo.
private volatile Type _dependency;
public MyClass()
{
_dependency = typeof(System.Data.Entity.SqlServer.SqlProviderServices);
}
No es necesario que instale Entity Framework en la aplicación de la Consola, solo necesita agregar una referencia al ensamblado EntityFramework.SqlServer.dll. Puede copiar este ensamblaje del proyecto de la biblioteca de clases que usa Entity Framework en una carpeta LIB y agregarle una referencia.
En resumen:
- Aplicación de la biblioteca de clases:
- Instalar Entity Framework
- Escriba su código de capa de datos
- El archivo app.config tiene toda la configuración relacionada con Entity Framework, excepto la cadena de conexión.
- Cree una consola, una aplicación web o de escritorio:
- Añadir una referencia al primer proyecto.
- Agregue una referencia a EntityFramework.SqlServer.dll.
- app.config / web.config tiene la cadena de conexión (recuerde que el nombre de la entrada de configuración debe ser el mismo que el nombre de la clase DbContext).
Espero que ayude.
Nota: tuve este problema al generar la base de datos SQL desde el modelo. Había creado todas las tablas bien pero no exportaría los cambios. Lo que debe tener en cuenta es que este error se genera cuando intenta exportar el sql utilizando la plantilla de generación DDL como SSDLtoSQL10. Aquí se espera la conexión de MySQL, así que asegúrese de seleccionar de la plantilla de generación de DDL desplegable SSDLtoMySQL en las propiedades del modelo. ¡Pasé un día entero en esto!
Probé casi todo lo anterior y nada funcionó.
Solo cuando establecí los archivos DLL a los que se hace referencia en las propiedades EntityFramework
y EntityFramework.SqlServer
proyecto predeterminado, Copy Local
to True
, ¡comenzó a funcionar!
Recibí el mismo error al usar Entity Framework 6 con SQL Server Compact 4.0. El artículo sobre MSDN para Entity Framework Providers para EF6 fue útil. La ejecución de los respectivos comandos del proveedor como paquetes nuget en la Consola del administrador del paquete podría resolver el problema, ya que también los paquetes NuGet agregarán automáticamente registros al archivo de configuración. PM> Install-Package EntityFramework.SqlServerCompact
para resolver el problema.
Se encontró con este problema hoy cuando trabaja con un conjunto de servicios web, cada uno en diferentes proyectos, y un proyecto separado que contiene pruebas de integración para algunos de esos servicios.
He estado usando esta configuración durante algún tiempo con EF5, sin necesidad de incluir referencias a EF del Proyecto de prueba de integración.
Ahora, después de actualizar a EF6, parece que necesito incluir una referencia a EF6 en el proyecto de prueba de integración también, aunque no se use allí (más o menos como lo señaló anteriormente el user3004275 ).
Indicaciones de que estás enfrentando el mismo problema:
- Las llamadas directamente a EF (conectarse a una base de datos, obtener datos, etc.) funcionan bien, siempre y cuando se inicien desde un proyecto que tenga referencias a EF6.
- Las llamadas al servicio a través de una interfaz de servicio publicada funcionan bien; Es decir, no hay referencias faltantes "internamente" en el servicio.
- Las llamadas directamente a los métodos públicos en el proyecto de servicio, desde un proyecto fuera del servicio, causarán este error, incluso si EF no se utiliza en ese proyecto en sí; Solo internamente en el proyecto llamado.
El tercer punto es lo que me echó por un tiempo, y todavía no estoy seguro de por qué esto es necesario. La adición de una referencia a EF6 en mi proyecto de Prueba de integración lo resolvió en cualquier caso ...
También puede ver este mensaje si olvida incluir "EntityFramework.SqlServer.dll".
Parece ser un archivo recién agregado en EF6. Inicialmente, no lo había incluido en mi módulo de combinación y me encontré con el problema enumerado aquí.
Tenía una aplicación de consola y una biblioteca de clases. En la biblioteca de clases, creé Entity Data Model (haga clic con el botón derecho en Class Library> Add> New Item> Data> ADO.NET Entity Data Model 6.0) y coloqué la referencia en la aplicación de la consola. Entonces, tiene una aplicación de consola que tiene referencia a la biblioteca de clases y dentro de la biblioteca de clases tiene el modelo EF. Tuve el mismo error cuando intenté obtener algunos registros de la tabla.
Resolví este problema siguiendo estos pasos:
- Haga clic con el botón derecho en la solución y elija la opción ''Administrar paquetes de NuGet para la solución'' y aparecerá la ventana del administrador de paquetes de NuGet.
- Vaya a la opción ''Administrar'' en ''Paquetes instalados'' SUGERENCIA: Entity Framework se agrega a Class Library, por lo que tendrá EntityFramework en ''Paquetes instalados'' y verá la opción ''Administrar''
- Haga clic en la opción ''Administrar'' y marque para instalar el paquete en el proyecto que tiene referencia a la biblioteca de clases que contiene el modelo EF (en mi caso, puse la casilla de verificación para instalar el paquete en la aplicación de consola que tenía referencia a la biblioteca de clases que tenía un modelo EF en su interior)
Eso es todo lo que tenía que hacer y todo funcionó a la perfección.
Espero que haya ayudado.
Tuve el mismo problema, solo copié el archivo de configuración de la aplicación del proyecto que contenía el DBContext a mi proyecto de prueba
Tuve la misma excepción lanzada. yo incluí
using System.Data;
using System.Data.Entity;
Y todo vuelve a funcionar de nuevo.
Tuve un problema relacionado al migrar desde una base de datos de CE a Sql Server en Azure. Solo desperdicié 4 horas tratando de resolver esto. Esperemos que esto pueda salvar a alguien un destino similar. Para mí, tenía una referencia a SqlCE en mi archivo packages.config. Eliminarlo resolvió todo mi problema y me permitió usar migraciones. Yay Microsoft para otra tecnología con problemas de configuración y configuración innecesariamente complejos.
Yo tengo el mismo error. Es extraño que solo suceda cada vez que use mi dbContext para consultar a cualquiera de mi modelo u obtener su lista como:
var results = _dbContext.MyModel.ToList();
Intentamos volver a instalar el Entity Framework, hacer referencia a él correctamente pero fue en vano.
Afortunadamente, intentamos verificar las soluciones de Nuget para ALL
, luego actualizar todo o asegurarnos de que la versión sea la misma porque notamos que los dos proyectos tienen diferentes versiones de EF en el proyecto web. Y funciona. El error se ha ido.
Aquí está la captura de pantalla de cómo administrar Nuget para todas las soluciones:
todos necesito su atención de que dos dll EntityFramework.dll y EntityFramework.SqlServer.dll son DataAccess layer Library y no es lógico usarlos a la vista o cualquier otro layer.it resuelve su problema pero no es lógico.
La forma lógica es que el atributo enitiess los elimine y reemplace con Fluent API. Esta es una solución real.