EF核心添加迁移失败,System.TypeLoadException
我想使用EF核心2.0来建立一个SQLite数据库,(一个简单的)。当我尝试在下面的代码上执行添加迁移时,它将失败,代码如下。EF核心添加迁移失败,System.TypeLoadException
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>添加-迁移HomeAutomationDB
System.TypeLoadException:无法从组件加载类型 'System.Globalization.CultureInfo'“System.Runtime,版= 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'。 在System.Collections.Immutable.ImmutableSortedDictionary2.Node.SetOrAdd(TKey key, TValue value, IComparer
1 keyComparer,的IEqualityComparer1 valueComparer, Boolean overwriteExistingValue, Boolean& replacedExistingValue, Boolean& mutated) at System.Collections.Immutable.ImmutableSortedDictionary
2.Node.SetItem(TKEY的键,TValue值,的IComparer1 keyComparer, IEqualityComparer
1 valueComparer,布尔& replacedExistingValue,布尔&突变的) 在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.ConcurrentDictionary
2.GetOrAdd(TKEY的密钥,函数功能2 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.CallSiteVisitor
2.VisitCallSite(IServiceCallSite调用点,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.CallSiteVisitor
2.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](IInfrastructure
1个存取) 在Microsoft.EntityFrameworkCore.Design.Internal.DbContextOperations.CreateContext (函数功能1 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_0
1.b__0() 在Microsoft.EntityFrameworkCore.Design.OperationExecutor.OperationBase.Execute(动作动作) 无法从组件加载类型 'System.Globalization.CultureInfo'“System.Runtime,版本= 4.0.0.0,文化=中立,PublicKeyToken = b03f5f7f11d50a3a'。
PM>
我曾尝试一切可能的提示我可以在网上找到,但它仍然失败。它可以通过的唯一方法是如果我从RothUnit模型中删除列表并删除RothSensor类中的最后一行。
我不知道这是EF核心还是我的代码。任何人都可以引导我在正确的方向。
经过大量的挖掘并向EntityFrameworkCore GitHub页面提交问题。看起来这是EF Core 2.0本身的一个问题。他们意识到这一点,并已在未来的版本中解决。
有一种莫名其妙变通方法,您可以通过以下链接找到它: - GitHub EF Core
解决办法是在EF核心团队的礼貌。
你是否定义了Rothsensor和Rothunit之间的关系? –
是的,我甚至试图明确定义关系,而不是让EF发现它,这是它失败的地方。但我不知道它为什么失败! – DreamNet
您是否为modelbuilder中的实体定义了任何主键或外键? –