带有过滤器的ApplyConfigurationsFromAssembly Entityframework Core

Gay*_*yan 1 c# dbcontext entity-framework-core asp.net-core entity-framework-migrations

我需要使用特定类型的实体创建数据库上下文,因为我在解决方案上有多个数据库上下文。我的问题是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);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以DaysOfWeek实体有基类BaseEntity

public class DaysOfWeek : BaseEntity
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我们如何 IEntityTypeConfiguration使用具有基本模型的实体进行过滤BaseEntity

谢谢

Ami*_*ich 6

文档说您可以添加用于过滤的谓词作为第二个参数。

在这种情况下,谓词将扫描类型,并且对于每种类型,将检查它是否实现接口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]))
);
Run Code Online (Sandbox Code Playgroud)