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

时间:2018-12-06 17:38:55

标签: c# entity-framework-core ef-core-2.2

我有一个层次结构,我想在一个类中对其进行配置。有可能吗?

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

1 个答案:

答案 0 :(得分:4)

当然可以。毕竟,您完全不必使用IEntityTypeConfiguration<>-您可以在OnModelCreating内配置 all 您的实体。同样,所有ApplyConfiguration通用方法所做的就是调用实现Configure接口的类的IEntityTypeConfiguration<TEntity>方法,该接口传递通常从EntityTypeBuilder<TEntity>调用中获得的modelBuilder.Entity<TEntity>()实例(或接收该方法第二次重载的Action<>作为参数。

因此,您可以将代码放入接收ModelBuilder实例的任何静态或实例类方法中。如果要使用类,则不应实现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);