#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. Даже со многими ошибка все еще произошла.