Как отфильтровать все, что возвращается из Entity Framework, по свойству базового класса моих сущностей - PullRequest
0 голосов
/ 20 мая 2018

Класс, от которого наследуются все мои сущности, выглядит следующим образом:

public class EntityBase
{
    public DateTimeOffset? CreatedDate { get; set; }
    public DateTimeOffset? LastModifiedDate { get; set; }
    public string Status { get; set; }
}

Я пытаюсь добиться, чтобы EF автоматически отфильтровывал любой статус, который был "удален", каждый раз, когда я возвращалсярезультаты из базы данных.С помощью поиска, который я сделал, я нашел общий способ сделать это путем переопределения OnModelCreating В классе контекста Db, например, так:

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<EntityBase>().Map(m => m.Requires("Status").HasValue("Active"));
        base.OnModelCreating(modelBuilder);
    }

Это проблематично по нескольким причинам.В первую очередь это не работает.Как только я касаюсь базы данных, я получаю сообщение об ошибке:

EntityType 'EntityBase' не определен ключ.Определите ключ для этого EntityType.EntityBases: EntityType: EntitySet «EntityBases» основан на типе «EntityBase», для которого не определены ключи.

Что верно, моя базовая сущность не имеет ключа.Тем не менее, это также не фактическая таблица в моей БД, поэтому не предполагается.

Моя другая проблема заключается в том, что на самом деле это не тот фильтр, который мне нужен.Это использует .HasValue("Active"), когда я ищу больше .DoesntHaveValue("Deleted").

1 Ответ

0 голосов
/ 20 мая 2018

Закончил работу с предложением фильтра запросов от @ ivan-stoev и прикрепил его к конструктору контекста.Вот код для потомков.

using Z.EntityFramework.Plus;

...

public MyContext() : base("MyContext")
{
    this.Filter<EntityBase>(q => q.Where(x => x.Status != "Deleted"));
}
...