Why is Entity Framework 6.1.3 throwing a "Could not load type 'System.Data.Entity.Infrastructure.TableExistenceChecker'"

51,218

Solution 1

Apparently if there is a reference to entity framework in the GAC and it is not the same as the one you have referenced via Nuget you get this error. In my case it was 6.0.0 in the GAC.

Solution:

Launch the developer command prompt for visual studio then:

gacutil -u EntityFramework

Solution 2

If you find as I did that EF is not installed in the Gac then the next step is to uninstall it AFTER you note the version of your package. I use NuGet so I went to Tools...Library Package Manager...Package Manager Console. I tried the GUI first but uninstalling failed and as of this writing you can only install the latest version of the package.

  1. Open your solution and go to Tools...Library Package Manager...Package Manager Console
  2. Select the project that uses EF and is having the problem
  3. Type Uninstall-package EntityFramework
  4. You should be prompted to restart Visual Studio so close and reopen VS and your solution
  5. Open Package Manager Console with Tools...Library Package Manager...Package Manager Console
  6. Type Install-package EntityFramework (add -Version x.x.x if you're installing an older version)
  7. You should be good to go

Solution 3

I had the exact same problem in my unit test project. After a couple of hours of troubleshooting I noticed that the .csproj-file still had reference to my previous version of 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>

I simply changed the version to 6.1.3 and all tests ran fine again.

Solution 4

In my case when I got this error, I was not able to find EF in GAC. So nothing was to unistall.

However, after investigating all EF references in all projects of the solution it was found that one of the project referenced EF 6.1.1 and all others 6.1.3. Answer by michaelhawkins helped in this case, I removed all EF from all projects and then installed the same latest version back.

Just leaving it here, because in all cases this exception most probably is due to conflict of versions of EF, but where specifically you need to look to resolve the conflict may depend on various factors.

Solution 5

In my case I had to remove the EntityFramework.dll from this folder:

C:\Windows\Microsoft.NET\assembly\GAC_MSIL\EntityFramework
Share:
51,218
C Tierney
Author by

C Tierney

Geek for good building software for non profits and churches

Updated on July 09, 2022

Comments

  • C Tierney
    C Tierney almost 2 years

    Brand new project and entity framework will not start due to the exception being thrown as soon as the context instance is created.

    Entity framework throws the following exception:

    Could not load type 'System.Data.Entity.Infrastructure.TableExistenceChecker' from assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089'.

    References:

    • EntityFramework
    • EntityFramework.SqLServer

    Via the nuget package manager:

    Install-Package entityframework
    

    Very simple context and entity:

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

    Here is the current app.config file:

    <?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 is as follows:

       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()
    
  • Michal Ciechan
    Michal Ciechan about 9 years
    In the project that you have as Startup?
  • C Tierney
    C Tierney about 9 years
    Yes all one project. Very simple test project.
  • Michal Ciechan
    Michal Ciechan about 9 years
    I would say uninstall EF, and reinstall. If that doesnt work, uninstall and install earlier version
  • C Tierney
    C Tierney about 9 years
    Tried that too, just a different exception being thrown at the same location with Version 6 and 6.1
  • C Tierney
    C Tierney about 9 years
    The strangest thing is that I have a design first model, same machine that works just fine. But code first I can't even get a single project to run
  • Michal Ciechan
    Michal Ciechan about 9 years
    Could you check the bin/Debug or bin/Release output folders? To see if all the assemblie you need are in that Folder. Especially System.Data, EntityFramework, EntityFramework.SqlServer
  • C Tierney
    C Tierney about 9 years
  • mguadarrama
    mguadarrama about 9 years
    Can @Kjartan explain the reason for down vote ? For me was not that obious to find the right reference. I thought that VS will take dll only from my packages folder.
  • kwiri
    kwiri over 8 years
    This works for a similar problem. In my case I could not do an edmx update(add table to model) .It would fail with all most a similar error(I installed entity framework tools 6.1.1) .I did as what this answer says by removing it. BTW all my teammates where not having the same problem and they did not have that C:\Windows\Microsoft.NET\assembly\GAC_MSIL\EntityFramework folder on their machines
  • Boris
    Boris over 8 years
    I think update-package EntityFramework does the same and is way easier, for me it automatically uninstalled the old version then installed the new one and it was fine.
  • Sonic Soul
    Sonic Soul over 7 years
    exactly my issue. i prefer to reference assemblies manually and i never needed the SqlServer.dll since we use Oracle. But unit tests still needed this here: System.Data.Entity.SqlServer.SqlProviderServices.get_Instanc‌​e(). So annoying
  • IrishChieftain
    IrishChieftain almost 6 years
    'gacutil' is not recognized as an internal or external command, operable program or batch file.
  • Markus
    Markus over 4 years
  • CodingCretin
    CodingCretin over 4 years
    If you go for the update-package solution above be warned that you can, as I did, end up updating EF in all dependent projects. Turned into a nightmare for me