是否可以在单独的 class 中移动层次结构的流畅配置?

Is it possible to move fluent configuration of a hierarchy in a separate class?

我有一个层次结构,我想在一个层次结构中配置它 class。可能吗?

目前我有 NIEntityTypeConfiguration<> 接口的实现 - 层次结构中每个实体一个。

当然有可能。毕竟,您根本不会被迫使用 IEntityTypeConfiguration<> - 您可以在 OnModelCreating 中配置 所有 您的实体。此外,ApplyConfiguration 泛型方法所做的就是调用 class 的 Configure 方法实现 IEntityTypeConfiguration<TEntity> 接口传递 EntityTypeBuilder<TEntity> 实例,您通常从 modelBuilder.Entity<TEntity>() 调用(或作为该方法第二次重载的 Action<> 的参数接收)。

因此,您可以将代码放在接收 ModelBuilder 实例的任何静态或实例 class 方法中。如果你想使用 class,它不应该实现 IEntityTypeConfiguration<> 因为没有办法从 ``EntityTypeBuilder` 得到 ModelBuilder,你需要它才能配置基础实体和派生实体。

例如,像这样:

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);