No se puede encontrar System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer

c# entity-framework-6

Pregunta

Estoy construyendo un DbContext desde un SqlConnection. Cuando lo uso, recibo el siguiente error:

El tipo de proveedor Entity Framework 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089' para el 'System.Data.SqlClient' El proveedor de ADO.NET no pudo ser cargado.

Estoy usando 6.0.0-alpha2-11210.

Lo encontré raro ya que tengo una referencia hacia Entity.SqlServer y que logré 'arreglarlo' poniendo la siguiente línea de código antes de una consulta:

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

¿Es un error de la versión alfa?

Respuesta aceptada

Espero no llegar tarde. Estoy usando ASP.NET MVC 4 y Entity Framework 6 alpha 3 y me encontré con un problema similar.

Tengo varios proyectos en mi solución. Los 2 proyectos principales son:

MyProject.Infrastructure.EntityFramework
MyProject.Web

En el primer proyecto configuraría todos mis repositorios, DbContext , etc. En este proyecto tengo 2 referencias:

EntityFramework
EntityFramework.SqlServer

El segundo proyecto es mi sitio web. Utiliza los repositorios en el primer proyecto para devolver mis datos. Por ejemplo:

private readonly IMyRepository myRepository;

public MyController(IMyRepository myRepository)
{
     this.myRepository = myRepository;
}

public ActionResult Details(int id)
{
     MyObject myObject = myRepository.FindById(id);

     return View();
}

Aquí es donde tuve mis problemas, llamando a FindById .

Todo lo que hice fue agregar la siguiente referencia a mi sitio web:

EntityFramework.SqlServer

En mi web.config:

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

Y debajo de la etiqueta system.webServer cierre:

<entityFramework>
     <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
          <parameters>
               <parameter value="v11.0" />
          </parameters>
     </defaultConnectionFactory>
</entityFramework>

Espero que esto sea de ayuda.


Respuesta popular

Lo que hiciste crea una referencia a EntityFramework.SqlServer.dll. Asegura que este ensamblaje se copie en la carpeta bin de proyectos usando su ensamblaje de acceso a datos.

Puede hacer lo mismo agregando algo como lo siguiente en algún lugar de su conjunto de acceso a datos:

Type _Hack = typeof(System.Data.Entity.SqlServer.SqlProviderServices)



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é