具有过滤实体框架核心的ApplyConfigurationsFromAssembly

时间:2020-04-25 18:49:11

标签: c# asp.net-core entity-framework-core entity-framework-migrations dbcontext

由于我在解决方案上有多个Db上下文,因此我需要使用特定类型的实体创建数据库上下文。我的问题是OnModelCreating我们从程序集builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly())应用配置,所以我想仅应用IEntityTypeConfiguration的配置,实体类型的基础模型为BaseEntity,如下所示

public class DaysOfWeekBuilder : IEntityTypeConfiguration<DaysOfWeek>
{
    public void Configure(EntityTypeBuilder<DaysOfWeek> builder)
    {
        builder.ToTable("DaysOfWeek");
        builder.Property(e => e.Name).HasMaxLength(15);
    }
}

所以DaysOfWeek实体具有基类BaseEntity

public class DaysOfWeek : BaseEntity
{
    public string Name { get; set; }
}

我们如何使用基本模型为IEntityTypeConfiguration的实体过滤BaseEntity

谢谢

1 个答案:

答案 0 :(得分:1)

documentation说,您可以添加要过滤的谓词作为第二个参数。

在这种情况下,谓词将扫描类型,并针对每种类型,将检查其是否实现了IEntityTypeConfiguration<T>接口以及T是否继承了BaseEntity

builder.ApplyConfigurationsFromAssembly(
    Assembly.GetExecutingAssembly(), 
    t => t.GetInterfaces().Any(i => 
                i.IsGenericType &&
                i.GetGenericTypeDefinition() == typeof(IEntityTypeConfiguration<>) &&
                typeof(BaseEntity).IsAssignableFrom(i.GenericTypeArguments[0]))
);