0

我想使用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.ImmutableSortedDictionary 2.Node.SetOrAdd(TKey key, TValue value, IComparer 1 keyComparer,的IEqualityComparer 1 valueComparer, Boolean overwriteExistingValue, Boolean& replacedExistingValue, Boolean& mutated) at System.Collections.Immutable.ImmutableSortedDictionary 2.Node.SetItem(TKEY的鍵,TValue值,的IComparer 1 keyComparer, IEqualityComparer 1 valueComparer,布爾& replacedExistingValue,布爾&突變的) 在System.Collections.Immutable.ImmutableSortedDictionary 2.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.CallSiteVisitor 2.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.CallSiteVisitor 2.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核心還是我的代碼。任何人都可以引導我在正確的方向。

+0

你是否定義了Rothsensor和Rothunit之間的關係? –

+0

是的,我甚至試圖明確定義關係,而不是讓EF發現它,這是它失敗的地方。但我不知道它爲什麼失敗! – DreamNet

+0

您是否爲modelbuilder中的實體定義了任何主鍵或外鍵? –

回答

0

經過大量的挖掘並向EntityFrameworkCore GitHub頁面提交問題。看起來這是EF Core 2.0本身的一個問題。他們意識到這一點,並已在未來的版本中解決。

有一種莫名其妙變通方法,您可以通過以下鏈接找到它: - GitHub EF Core

解決辦法是在EF核心團隊的禮貌。

相關問題