Свойство не игнорируется в EntityTypeConfiguration?

#entity-framework #entity-framework-core #ef-core-3.1

#entity-framework #entity-framework-core #ef-core-3.1

Вопрос:

У меня есть простой класс сущности со списком базовых классов, который игнорируется в модели:

 public class MyClass
{
    public int Id {get;set;}
    public List<BaseChild> BaseChildren {get; set;}
}

  

У которого такая конфигурация:

 public class MyClassConfiguration : IEntityTypeConfiguration<MyClass>
{
    public void Configure(EntityTypeBuilder<MyClass> builder)
    {
        builder.Property(o => o.Id).UseHiLo();
        builder.HasKey(o => o.Id);
    
        builder.Ignore(o => o.BaseChildren);
    }
}
  

У меня есть классы, которые наследуются от BaseChild, и все они используют эту конфигурацию:

 public abstract class BaseChild
{
    public int MyClassId { get; set; }
}

public abstract class BaseChildConfiguration<T> : IEntityTypeConfiguration<T> where T : BaseChild
{
    public virtual void Configure(EntityTypeBuilder<T> builder)
    {
        builder.HasKey(o => o.MyClassId);
        builder.HasOne<MyClass>()
            .WithOne()
            .HasForeignKey<T>(o => o.MyClassId);
    }
}

  
 public class Instance : Component
{
    public long Code { get; set; }
}

public class InstanceConfiguration : BaseChildConfiguration<Instance>
{
}

  

Все конфигурации должным образом применяются в моем OnModelCreating:

 protected override void OnModelCreating(ModelBuilder mb)
{
    mb.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly());
}

  

Тем не менее, по какой-то причине я продолжаю получать следующее исключение:

Ключ не может быть настроен в ‘Instance’, потому что это производный тип. Ключ должен быть настроен для корневого типа ‘BaseChild’. Если вы не предполагали, что ‘BaseChild’ будет включен в модель, убедитесь, что он не включен в свойство DbSet в вашем контексте, на которое ссылается конфигурационный вызов ModelBuilder, или на которое ссылается свойство навигации для типа, который включен в модель.

Комментарии:

1. builder.HasOne<MyClass>().WithOne() .. Даже если коллекция MyClass базового дочернего элемента игнорируется, это все равно должно быть builder.HasOne<MyClass>().WithMany() Хотя я не уверен, почему BaseChildren хотел бы, чтобы его игнорировали… Хотя и не уверен, но базовому дочернему элементу все еще может потребоваться ссылка на MyClass..

2. Даже со многими ошибка все еще произошла.