ApplyConfigurationsFromAssembly с фильтром Entityframework Core - PullRequest
0 голосов
/ 25 апреля 2020

У меня есть требование создать контекст БД с указанным типом сущности c, поскольку у меня есть несколько контекстов БД в решении. моя проблема 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 Ответ

1 голос
/ 25 апреля 2020

Документация говорит, что вы можете добавить предикат для фильтрации в качестве второго аргумента.

В этом случае предикат будет сканировать типы и для каждого типа будет проверять, реализует ли он 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]))
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...