由于创建上下文实例后立即引发异常,因此全新的项目和 Entity Framework 将无法启动。

Entity Framework 引发以下异常:



引用:

  • EntityFramework
  • EntityFramework.SqLServer

  • 通过nuget软件包管理器:
    Install-Package entityframework
    

    非常简单的上下文和实体:
    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();
        }
    }
    

    这是当前的app.config文件:

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

    堆栈跟踪如下:
       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()
    

    最佳答案

    如果您像我一样发现Gac中未安装EF,那么下一步是在记下软件包的版本后将其卸载。我使用NuGet,所以我去了Tools ... Library Package Manager ... Package Manager Console。我首先尝试了GUI,但卸载失败,截至撰写本文时,您只能安装软件包的最新版本。

  • 打开解决方案,然后转到工具...库包管理器...包管理器控制台
  • 选择使用EF且存在问题
  • 的项目
  • 类型卸载软件包EntityFramework
  • 应该提示您重新启动Visual Studio,因此请关闭并重新打开VS和您的解决方案
  • 使用工具...库包管理器...包管理器控制台
  • 打开包管理器控制台
  • 类型安装包EntityFramework(如果要安装旧版本,则添加-Version x.x.x)
  • 您应该很好
  • 关于c# - 为什么 Entity Framework 6.1.3抛出 “Could not load type ' System.Data.Entity.Infrastructure.TableExistenceChecker'”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29051931/

    10-11 18:21