【问题标题】:EF Core Add-Migration fails with System.TypeLoadExceptionEF Core 添加迁移失败并出现 System.TypeLoadException
【发布时间】:2017-11-06 20:29:17
【问题描述】:

我正在尝试使用 EF core 2.0 来构建 SQLite 数据库(一个简单的)。当我尝试对以下代码进行添加迁移时,它会因以下代码而失败。

public class RothSensor
{
    public int Id { get; set; }

    public string Location { get; set; }

    public double CurrentTemp { get; set; }

    public double TargetTemp { get; set; }

    public enum _mode
    {
        Normal = 0,
        Night = 1,
        Holliday = 2
    }

    public _mode Mode { get; set; }

    public double MinimumTemp { get; set; }

    public double MaximumTemp { get; set; }

    public int UnitId { get; set; }

    public RothUnit Unit { get; set; }

}

public class RothUnit
{

    public int Id { get; set; }

    public string Name { get; set; }

    public List<RothSensor> Sensors { get; set; }


}

public class HADataContext : DbContext
{
    public DbSet<RothUnit> RUnits { get; set; }
    public DbSet<RothSensor> RSensors { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source = HomeAutomation.db");
    }
}

错误代码是:-

PM> Add-Migration HomeAutomationDB
System.TypeLoadException:无法从程序集“System.Runtime,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”加载类型“System.Globalization.CultureInfo”。 在 System.Collections.Immutable.ImmutableSortedDictionary2.Node.SetOrAdd(TKey key, TValue value, IComparer1 keyComparer, IEqualityComparer1 valueComparer, Boolean overwriteExistingValue, Boolean& replacedExistingValue, Boolean& mutated) at System.Collections.Immutable.ImmutableSortedDictionary2.Node.SetItem(TKey key, TValue value, IComparer1 keyComparer, IEqualityComparer1 valueComparer, Boolean&replacedExistingValue, Boolean& mutated) 在 System.Collections.Immutable.ImmutableSortedDictionary2.Builder.set_Item(TKey key, TValue value) at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationshipDiscoveryConvention.GetNavigationCandidates(EntityType entityType) at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationshipDiscoveryConvention.FindRelationshipCandidates(InternalEntityTypeBuilder entityTypeBuilder) at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationshipDiscoveryConvention.DiscoverRelationships(InternalEntityTypeBuilder entityTypeBuilder) at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.RelationshipDiscoveryConvention.Apply(InternalEntityTypeBuilder entityTypeBuilder) at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.ImmediateConventionScope.OnEntityTypeAdded(InternalEntityTypeBuilder entityTypeBuilder) at Microsoft.EntityFrameworkCore.Metadata.Conventions.Internal.ConventionDispatcher.OnEntityTypeAdded(InternalEntityTypeBuilder entityTypeBuilder) at Microsoft.EntityFrameworkCore.Metadata.Internal.Model.AddEntityType(EntityType entityType) at Microsoft.EntityFrameworkCore.Metadata.Internal.Model.AddEntityType(Type type, ConfigurationSource configurationSource) at Microsoft.EntityFrameworkCore.Metadata.Internal.InternalModelBuilder.Entity(TypeIdentity type, ConfigurationSource configurationSource) at Microsoft.EntityFrameworkCore.Metadata.Internal.InternalModelBuilder.Entity(Type type, ConfigurationSource configurationSource) at Microsoft.EntityFrameworkCore.ModelBuilder.Entity(Type type) at Microsoft.EntityFrameworkCore.Infrastructure.ModelCustomizer.FindSets(ModelBuilder modelBuilder, DbContext context) at Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelCustomizer.FindSets(ModelBuilder modelBuilder, DbContext context) at Microsoft.EntityFrameworkCore.Infrastructure.RelationalModelCustomizer.Customize(ModelBuilder modelBuilder, DbContext context) at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.<>c__DisplayClass5_0.<GetModel>b__0(Object k) at System.Collections.Concurrent.ConcurrentDictionary2.GetOrAdd(TKey 键,Func2 valueFactory) at Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext context, IConventionSetBuilder conventionSetBuilder, IModelValidator validator) at Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model() at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServicesBuilder.<>c.<TryAddCoreServices>b__7_1(IServiceProvider p) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactory(FactoryCallSite factoryCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(IServiceCallSite callSite,TArgument 参数) 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite,ServiceProvider 提供程序) 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(IServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitConstructor(ConstructorCallSite constructorCallSite, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(IServiceCallSite callSite, TArgument 参数) 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitScoped(ScopedCallSite scopedCallSite,ServiceProvider 提供程序) 在 Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor2.VisitCallSite(IServiceCallSite callSite, TArgument argument) at Microsoft.Extensions.DependencyInjection.ServiceProvider.<>c__DisplayClass22_0.<RealizeService>b__0(ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetService(Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService(IServiceProvider provider, Type serviceType) at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider) at Microsoft.EntityFrameworkCore.DbContext.get_DbContextDependencies() at Microsoft.EntityFrameworkCore.DbContext.get_InternalServiceProvider() at Microsoft.EntityFrameworkCore.DbContext.Microsoft.EntityFrameworkCore.Infrastructure.IInfrastructure<System.IServiceProvider>.get_Instance() at Microsoft.EntityFrameworkCore.Infrastructure.AccessorExtensions.GetService[TService](IInfrastructure1 访问者) 在 Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(Func1 factory) at Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext(String contextType) at Microsoft.EntityFrameworkCore.Design.Internal.MigrationsOperations.AddMigration(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigrationImpl(String name, String outputDir, String contextType) at Microsoft.EntityFrameworkCore.Design.OperationExecutor.AddMigration.<>c__DisplayClass0_1.<.ctor>b__0() at Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.<>c__DisplayClass3_01.b__0() 在 Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(操作动作) 无法从程序集“System.Runtime,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”加载类型“System.Globalization.CultureInfo”。
下午>

我已经尝试了所有可以在网上找到的提示,但仍然失败。它可以通过的唯一方法是,如果我从 RothUnit 模型中删除 List 并删除 RothSensor 类中的最后一行。

我不知道是 EF 核心还是我的代码。谁能指导我正确的方向。

【问题讨论】:

  • 你定义了 Rothsensor 和 Rothunit 的关系了吗???
  • 是的,我什至尝试明确定义关系,而不是让 EF 发现它,这是它失败的地方。但是不知道为什么会失败!
  • 您是否为模型构建器中的实体定义了任何主键或外键??
  • 我使用了以下代码,但仍然失败:-protected override void On model creation (ModelBuilder modelBuilder) { modelBuilder.Entity().HasOne(u => u.U it).WithMany( s =>s.Sensors).HasForeignKey(u =>u.UnitId);} 是这个意思吗?!
  • 经过谷歌搜索后,我认为安装的软件包可能有问题。你有“microsoft.entityframeworkcore.sqlite.design”软件包吗?

标签: entity-framework visual-studio-2017 entity-framework-core


【解决方案1】:

经过大量挖掘并将问题提交到 EntityFrameworkCore GitHub 页面。这似乎是 EF Core 2.0 本身的问题。他们意识到了这一点,并在未来的版本中解决了这一问题。

有一种解决方法,您可以在以下链接中找到它:- GitHub EF Core

解决方法由 EF 核心团队提供。

【讨论】:

    猜你喜欢
    • 2017-11-30
    • 2017-04-12
    • 1970-01-01
    • 2017-05-30
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-30
    相关资源
    最近更新 更多