visual tutorial studio mvc framework first español code c# .net entity-framework entity-framework-6

c# - tutorial - ¿Por qué Entity Framework 6.1.3 arroja un "No se pudo cargar el tipo ''System.Data.Entity.Infrastructure.TableExistenceChecker''"



entity framework visual studio 2017 (11)

¿Tiene referencia EntityFramework.SqlServer ? Esto debería venir automáticamente con el marco de la entidad. Si no, intente agregarlo como referencia o vía Nuget.

Por supuesto, eso es si usted está utilizando el proveedor SqlServer. de lo contrario, debe agregar su proveedor específico.

El nuevo marco de entidad y proyecto no se iniciará debido a la excepción lanzada tan pronto como se crea la instancia de contexto.

El marco de la entidad arroja la siguiente excepción:

No se pudo cargar el tipo ''System.Data.Entity.Infrastructure.TableExistenceChecker'' del ensamblado ''EntityFramework, Version = 6.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089''.

Referencias

  • Marco de la entidad
  • EntityFramework.SqLServer

A través del administrador de paquetes nuget:

Install-Package entityframework

Contexto y entidad muy simples:

public class TextDbContext : DbContext { public TextDbContext() : base("Test") { } public DbSet<TestEntity> TestEntity { get; set; } } public class TestEntity { public int Id { get; set; } public string Name { get; set; } } static void Main(string[] args) { var test = ConfigurationManager.ConnectionStrings["Test"].ConnectionString; using (var conn = new SqlConnection(test)) { conn.Open(); var cmd = new SqlCommand("Select * from testtable", conn); var result = cmd.ExecuteReader(); } //exception thrown on this line is the same as the one in the context var instance = SqlProviderServices.Instance; using (var db = new TextDbContext()) { var item = new TestEntity { Name = "xyz" }; db.TestEntity.Add(item); db.SaveChanges(); } }

Aquí está el archivo app.config actual:

<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <connectionStrings> <add name="Test" connectionString="server=localhost;database=Test;Data Source=localhost;Integrated Security=True;Pooling=True" providerName="System.Data.SqlClient" /> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> <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>

Stack trace es el siguiente:

at System.RuntimeMethodHandle.InvokeMethod(Object target, Object[] arguments, Signature sig, Boolean constructor) at System.Reflection.RuntimeMethodInfo.UnsafeInvokeInternal(Object obj, Object[] parameters, Object[] arguments) at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture) at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, BindingFlags invokeAttr, Binder binder, Object[] index, CultureInfo culture) at System.Reflection.RuntimePropertyInfo.GetValue(Object obj, Object[] index) at System.Data.Entity.Utilities.MemberInfoExtensions.GetValue(MemberInfo memberInfo) at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(Type providerType) at System.Data.Entity.Infrastructure.DependencyResolution.ProviderServicesFactory.GetInstance(String providerTypeName, String providerInvariantName) at System.Data.Entity.Internal.AppConfig.<.ctor>b__2(ProviderElement e) at System.Linq.Enumerable.WhereSelectEnumerableIterator`2.MoveNext() at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection) at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source) at System.Data.Entity.Internal.AppConfig.<.ctor>b__1() at System.Lazy`1.CreateValue() at System.Lazy`1.LazyInitValue() at System.Lazy`1.get_Value() at System.Data.Entity.Internal.AppConfig.get_DbProviderServices() at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.RegisterDbProviderServices() at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.GetServiceFactory(Type type, String name) at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.<>c__DisplayClass1.<GetService>b__0(Tuple`2 t) at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.GetService(Type type, Object key) at System.Data.Entity.Infrastructure.DependencyResolution.DbDependencyResolverExtensions.GetServiceAsServices(IDbDependencyResolver resolver, Type type, Object key) at System.Data.Entity.Infrastructure.DependencyResolution.AppConfigDependencyResolver.GetServices(Type type, Object key) at System.Data.Entity.Infrastructure.DependencyResolution.ResolverChain.<>c__DisplayClass6.<GetServices>b__5(IDbDependencyResolver r) at System.Linq.Enumerable.<SelectManyIterator>d__14`2.MoveNext() at System.Linq.Enumerable.<ConcatIterator>d__71`1.MoveNext() at System.Linq.Enumerable.<OfTypeIterator>d__aa`1.MoveNext() at System.Data.Entity.Utilities.IEnumerableExtensions.Each[T](IEnumerable`1 ts, Action`1 action) at System.Data.Entity.Infrastructure.DependencyResolution.InternalConfiguration.Lock() at System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.<.ctor>b__1() at System.Lazy`1.CreateValue() at System.Lazy`1.LazyInitValue() at System.Lazy`1.get_Value() at System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.GetConfiguration() at System.Data.Entity.DbContext.InitializeLazyInternalContext(IInternalConnection internalConnection, DbCompiledModel model) at System.Data.Entity.DbContext..ctor(String nameOrConnectionString) at test2.TextDbContext..ctor() in //srv/users/carl.tierney/Documents/Visual Studio 2013/Projects/test2/test2/test2context.cs:line 13 at test2.Program.Main(String[] args) in //srv/users/carl.tierney/Documents/Visual Studio 2013/Projects/test2/test2/Program.cs:line 13 at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args) at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args) at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() at System.Threading.ThreadHelper.ThreadStart_Context(Object state) at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state at System.Threading.ThreadHelper.ThreadStart()


Aparentemente, si hay una referencia al marco de trabajo de la entidad en el GAC y no es la misma a la que se ha referido a través de Nuget, se obtiene este error. En mi caso fue 6.0.0 en el GAC.

Solución:

Inicie el símbolo del sistema del desarrollador para Visual Studio y luego:

gacutil -u EntityFramework


Cambiar el valor de la conexión de la cadena

"data source=.;initial catalog=[dbname];integrated security=True"

A

"Server=.;Database=[dbname];integrated security=True"


El mismo problema me pasó

Abra Visual Studio -> Herramientas -> Extensiones y actualizaciones

  1. Primero compruebe las actualizaciones si alguna actualización relacionada con Nuget Package Manager Console la actualiza.

  2. Seleccione la pestaña Todos en Extensiones y Actualizaciones, asegúrese de que su versión de la Consola Nuget Package Manager

  1. Abra su carpeta de proyecto -> Paquetes y luego elimine todo sobre el marco de la entidad

  2. Si hay un archivo como entityframework.deleteme -> elimínalo y reinicia Visual Studio


En mi caso, cuando obtuve este error, no pude encontrar EF en GAC. Entonces nada era para deshacer.

Sin embargo, después de investigar todas las referencias de EF en todos los proyectos de la solución, se encontró que uno de los proyectos hacía referencia a EF 6.1.1 y a todos los demás 6.1.3. La respuesta de michaelhawkins ayudó en este caso, eliminé todos los EF de todos los proyectos y luego volví a instalar la misma última versión.

Solo dejándolo aquí, porque en todos los casos esta excepción probablemente se deba a un conflicto de versiones de EF, pero donde específicamente debe buscar resolver el conflicto puede depender de varios factores.


En mi caso, tuve que eliminar EntityFramework.dll de esta carpeta:

C:/Windows/Microsoft.NET/assembly/GAC_MSIL/EntityFramework


Estaba obteniendo el mismo error después de instalar Visual Studio 2015 (VS 2015) al ejecutar pruebas unitarias que usan SQL CE. Mi fábrica de conexiones es SqlCeConnectionFactory y el proveedor es System.Data.Entity.SqlServerCompact.SqlCeProviderServices , EntityFramework.SqlServerCompact .

La solución para mí fue agregar la ruta a EntityFramework.SqlServerCompact.dll a la lista de implementación en mi archivo .testsettings . La línea que agregué se ve así:

<DeploymentItem filename="packages/EntityFramework.SqlServerCompact.6.1.1/lib/net45/EntityFramework.SqlServerCompact.dll" />


Para referencia futura en mi caso, la eliminación de EntityFramework.SqlServer de GAC corrigió este error. El ensamblado era exactamente la misma versión que la que se hace referencia en mi aplicación ( 6.0.0.0 para EntityFramework.dll y EntityFramework.SqlServer.dll ). Sin embargo, no tuve EntityFramework en GAC cuando ocurrió esta excepción.

Instalé las referencias de EntityFramework a mi aplicación con SQLite Core (x86 / x64) usando NuGet. También había incursionado con GAC un poco anteriormente y lo más probable es que haya agregado el ensamblaje allí mismo.


Si encuentra como lo hice que EF no está instalado en el Gac, el siguiente paso es desinstalarlo DESPUÉS de que note la versión de su paquete. Uso NuGet, así que fui a Herramientas ... Administrador de paquetes de biblioteca ... Consola de Package Manager. Primero probé con la GUI pero la desinstalación falló y, al momento de escribir esto, solo puedes instalar la última versión del paquete.

  1. Abra su solución y vaya a Herramientas ... Library Package Manager ... Package Manager Console
  2. Seleccione el proyecto que usa EF y está teniendo el problema
  3. Tipo Uninstall-package EntityFramework
  4. Se le debe pedir que reinicie Visual Studio, así que cierre y vuelva a abrir VS y su solución
  5. Abra la consola del Administrador de paquetes con herramientas ... Administrador de paquetes de biblioteca ... Consola de Package Manager
  6. Escriba Install-package EntityFramework (agregue -Version xxx si está instalando una versión anterior)
  7. Usted debe ser bueno para ir

Simplemente actualice el archivo package.config para que coincida con la versión EF que usa. En este caso, es "6.1.3".


Tuve exactamente el mismo problema en mi proyecto de prueba de unidad. Después de un par de horas de resolución de problemas, noté que el archivo .csproj todavía tenía referencia a mi versión anterior de EF:

<Reference Include="EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL"> <SpecificVersion>False</SpecificVersion> <HintPath>../packages/EntityFramework.6.1.1/lib/net45/EntityFramework.dll</HintPath> </Reference>

Simplemente cambié la versión a 6.1.3 y todas las pruebas funcionaron bien nuevamente.