【问题标题】:ApplyConfigurationsFromAssembly With Filter Entityframework CoreApplyConfigurationsFromAssembly 与过滤器实体框架核心
【发布时间】:2020-08-09 08:27:36
【问题描述】:

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

谢谢

【问题讨论】:

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


    【解决方案1】:

    documentation 表示您可以添加一个用于过滤的谓词作为第二个参数。

    在这种情况下,谓词将扫描类型,并且对于每种类型,将检查它是否实现了IEntityTypeConfiguration&lt;T&gt; 接口以及 T 是否继承了BaseEntity

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

    【讨论】:

    • 甜蜜。它完成了这项工作。非常感谢
    猜你喜欢
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 2016-09-18
    • 1970-01-01
    • 2021-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多