Можно ли перенести беглую конфигурацию иерархии в отдельный класс?

У меня есть иерархия, и я хочу настроить ее в одном классе. Является ли это возможным?

В настоящее время у меня есть N реализации для IEntityTypeConfiguration<> интерфейс - один на каждую сущность в иерархии.

1 ответ

Решение

Конечно, это возможно. В конце концов, вы не обязаны использовать IEntityTypeConfiguration<> на всех - вы можете настроить все ваши объекты внутри OnModelCreating, Также все ApplyConfiguration универсальный метод делает это для вызова Configure метод класса, реализующий IEntityTypeConfiguration<TEntity> передача интерфейса EntityTypeBuilder<TEntity> экземпляр, который вы обычно получаете от modelBuilder.Entity<TEntity>() позвонить (или получить в качестве аргумента Action<> второй перегрузки этого метода).

Следовательно, вы можете поместить свой код в любой статический метод или метод класса экземпляра, получив ModelBuilder пример. Если вы хотите использовать класс, он не должен реализовывать IEntityTypeConfiguration<> потому что нет возможности получить ModelBuilder от ``EntityTypeBuilder`, и вам это нужно для того, чтобы иметь возможность конфигурировать как базовые, так и производные объекты.

Например, что-то вроде этого:

class MyHierarchyConfiguration
{
    public void Apply(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<MyBaseEntity>(builder =>
        {
            // base entity configuration here
        });
        modelBuilder.Entity<MyDerivedEntity1>(builder =>
        {
            // derived entity configuration here
        });
        modelBuilder.Entity<MyDerivedEntity2>(builder =>
        {
            // derived entity configuration here
        });
        // etc.
    }
}

и внутри OnModelCreating:

new MyHierarchyConfiguration().Apply(modelBuilder);
Другие вопросы по тегам