Можно ли перенести беглую конфигурацию иерархии в отдельный класс? - PullRequest
0 голосов
/ 06 декабря 2018

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

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

1 Ответ

0 голосов
/ 06 декабря 2018

Конечно, это возможно.В конце концов, вы вообще не обязаны использовать 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);
...