wake-up-neo.com

Warum wirft Entity Framework 6.1.3 den Typ "System.Data.Entity.Infrastructure.TableExistenceChecker" nicht laden "

Ein brandneues Projekt- und Entitätsframework wird nicht gestartet, da die Ausnahme ausgelöst wird, sobald die Kontextinstanz erstellt wird. 

Das Entity-Framework löst die folgende Ausnahme aus:

Typ 'System.Data.Entity.Infrastructure.TableExistenceChecker' konnte nicht aus Assembly 'EntityFramework, Version = 6.0.0.0, Kultur = neutral, PublicKeyToken = b77a5c561934e089' geladen werden.

Verweise:

  • EntityFramework 
  • EntityFramework.SqLServer

Über den nuget package manager:

Install-Package entityframework

Sehr einfacher Kontext und Wesenheit:

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();
    }
}

Hier ist die aktuelle app.config-Datei:

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

Die Stapelverfolgung ist wie folgt:

   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()
38
C Tierney

Wenn es im GAC einen Verweis auf das Entity-Framework gibt und dieser nicht mit dem über Nuget referenziert ist, wird dieser Fehler angezeigt. In meinem Fall war es 6.0.0 im GAC. 

Lösung: 

Starten Sie den Entwicklerkommando Prompt for visual studio und dann:

gacutil -u EntityFramework
8
C Tierney

Wenn Sie feststellen, dass EF nicht im GAC installiert ist, deinstallieren Sie es, nachdem Sie die Version Ihres Pakets notiert haben. Ich benutze NuGet, also ging ich zu Tools ... Library Package Manager ... Package Manager Console. Ich habe zuerst die GUI ausprobiert, aber die Deinstallation ist fehlgeschlagen und zum jetzigen Zeitpunkt können Sie nur die neueste Version des Pakets installieren.

  1. Öffnen Sie Ihre Lösung und gehen Sie zu Extras ... Library Package Manager ... Package Manager Console
  2. Wählen Sie das Projekt aus, das EF verwendet und das Problem auftritt
  3. Geben Sie das Uninstall-Paket EntityFramework ein
  4. Sie sollten aufgefordert werden, Visual Studio neu zu starten. Schließen Sie VS und Ihre Lösung und öffnen Sie sie erneut
  5. Öffnen Sie die Package Manager Console mit Extras ... Library Package Manager ... Package Manager Console
  6. Geben Sie Install-package EntityFramework ein (fügen Sie -Version x.x.x hinzu, wenn Sie eine ältere Version installieren).
  7. Du solltest gut sein
17
michaelhawkins

Ich hatte genau das gleiche Problem in meinem Gerätetestprojekt. Nach einigen Stunden der Fehlerbehebung bemerkte ich, dass die .csproj-Datei immer noch einen Bezug zu meiner vorherigen Version von EF hatte:

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

Ich habe einfach die Version auf 6.1.3 geändert und alle Tests liefen wieder einwandfrei.

In meinem Fall, als ich diesen Fehler bekam, konnte ich EF in GAC nicht finden. Also nichts zu entgiften.

Nach der Untersuchung aller EF-Referenzen in allen Projekten der Lösung wurde jedoch festgestellt, dass eines der Projekte auf EF 6.1.1 und alle anderen auf 6.1.3 verweist. Antwort von michaelhawkins hat in diesem Fall geholfen, ich habe alle EF aus allen Projekten entfernt und dann die gleiche aktuelle Version wieder installiert. 

Lassen Sie es einfach hier, da diese Ausnahme in allen Fällen höchstwahrscheinlich auf einen Konflikt der EF-Versionen zurückzuführen ist. Wenn Sie jedoch speziell nach Konflikten suchen, kann dies von verschiedenen Faktoren abhängen.

5
Bogdan_Ch

In meinem Fall musste ich die EntityFramework.dll aus diesem Ordner entfernen:

C:\Windows\Microsoft.NET\Assembly\GAC_MSIL\EntityFramework
3
mguadarrama

Das gleiche Problem ist mir passiert 

Öffnen Sie Visual Studio -> Extras -> Erweiterungen und Updates 

  1. Überprüfen Sie zuerst Updates, wenn ein Update für die Nuget Package Manager Console ein Update enthält. 

  2. Wählen Sie in den Erweiterungen und Updates die Registerkarte Alle, und vergewissern Sie sich, dass Sie eine Version der Nuget Package Manager Console haben 

 enter image description here

  1. Öffnen Sie Ihren Projektordner -> Pakete und löschen Sie dann alles über das Entityframework 

  2. Wenn es eine Datei wie entityframework.deleteme gibt -> löschen Sie sie und starten Sie Visual Studio neu 

3
Hadnazzar

Haben Sie EntityFramework.SqlServer referenziert? Dies sollte automatisch mit dem Entity Framework kommen. Wenn nicht, fügen Sie es als Referenz hinzu oder über Nuget.

Natürlich, wenn Sie den SqlServer-Provider verwenden. Wenn nicht, müssen Sie Ihren spezifischen Anbieter hinzufügen.

1
Michal Ciechan

Aktualisieren Sie einfach die package.config -Datei, um sie der verwendeten EF-Version anzupassen.

1
charles

In meinem Fall für das Nachschlagen von EntityFramework.SqlServer aus GAC wurde dieser Fehler behoben. Die Assembly war genau dieselbe Version wie die in meiner Anwendung referenzierte (6.0.0.0 für EntityFramework.dll und EntityFramework.SqlServer.dll). Ich hatte jedoch keine EntityFramework in GAC, als diese Ausnahme auftrat.

Ich hatte die EntityFramework-Referenzen für meine Anwendung mit SQLite Core (x86/x64) mit NuGet installiert. Ich hatte mich auch schon früher mit GAC beschäftigt und die Assembly dort höchstwahrscheinlich selbst hinzugefügt.

1
Silvyrfir

Verbindungszeichenfolge ändern von 

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

Zu

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

Diese Fehlermeldung wurde nach der Installation von Visual Studio 2015 (VS 2015) beim Ausführen von Komponententests mit SQL CE angezeigt. Meine Verbindungs-Factory ist SqlCeConnectionFactory und der Provider ist System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact.

Die Lösung für mich bestand darin, den Pfad zu EntityFramework.SqlServerCompact.dll zur Bereitstellungsliste in meiner .testsettings-Datei hinzuzufügen. Die Zeile, die ich hinzugefügt habe, sieht so aus:

<DeploymentItem filename="packages\EntityFramework.SqlServerCompact.6.1.1\lib\net45\EntityFramework.SqlServerCompact.dll" />
0
Paul Shippy