EF核心实体配置未在OnModelCreating中应用

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EF核心实体配置未在OnModelCreating中应用相关的知识,希望对你有一定的参考价值。

我现在有一个简单的上下文,它使用一些像这样的基类:

public abstract class EntityBase

    public int Id  get; set; 


public abstract class TranslatableEntityBase : EntityBase

    public string TranslationKey  get; set; 
    public TranslatableEntityBase(string translationKey) : base()
    
        TranslationKey = translationKey;
    


public class Country : TranslatableEntityBase

    public Country(string name, string code, string translationKey) 
    : base(translationKey)
    
        Name = name;
        Code = code;
    

    public string Name  get; set; 
    public string Code  get; set; 


这些配置也具有这样的基类:

public abstract class EntityBaseConfiguration<T> : IEntityTypeConfiguration<T> where T : EntityBase

    public virtual void Configure(EntityTypeBuilder<T> builder)
    

    


public abstract class TranslatableEntityBaseConfiguration<T> : EntityBaseConfiguration<T> where T : TranslatableEntityBase

    // Hide parent method to provide overridable one to children
    public new virtual void Configure(EntityTypeBuilder<T> builder)
    
        base.Configure(builder);

        builder.Property(e => e.TranslationKey)
               .IsRequired()
               .HasMaxLength(255);
    


public class CountryConfiguration : TranslatableEntityBaseConfiguration<Country>

    public override void Configure(EntityTypeBuilder<Country> builder)
    
        base.Configure(builder);

        builder.Property(c => c.Name)
               .IsRequired()
               .HasMaxLength(255);

        builder.Property(c => c.Code)
               .IsRequired()
               .HasMaxLength(3);
    

而且我的上下文是这样定义的:

public class MyContext : DbContext

    public MyContext(DbContextOptions options)
        : base(options)
    

    

    public DbSet<Country> Countries  get; set; 

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    
        base.OnModelCreating(modelBuilder);
        modelBuilder.ApplyConfigurationsFromAssembly(GetType().Assembly);
    

[当我运行dotnet ef migrations add InitialMigration时,它将创建迁移,但是未应用实体的配置(无最大长度或不需要)。>>

我已经尝试过直接使用modelBuilder.ApplyConfiguration(new CountryConfiguration());,但结果相同。

我想念什么?是因为继承吗?

谢谢

我现在有一个简单的上下文,它使用一些像这样的基类:公共抽象类EntityBase public int Id get;组; 公共抽象类TranslatableEntityBase:...

答案

好,我找到了。

以上是关于EF核心实体配置未在OnModelCreating中应用的主要内容,如果未能解决你的问题,请参考以下文章

在 EF7(核心)OnModelCreating 中使用自定义属性

实体框架逆向工程 OnModelCreating

EF CodeFirst 之 Fluent API

5.EF Core 数据库映射模型隐藏属性配置

Entity Framework Core是如何根据实体类生成模型的?

EF OnModelCreating