Можно ли перенести беглую конфигурацию иерархии в отдельный класс?
У меня есть иерархия, и я хочу настроить ее в одном классе. Является ли это возможным?
В настоящее время у меня есть 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);