如何通过我的实体基类

时间:2018-05-20 18:10:44

标签: c# entity-framework entity-framework-6

我所有实体继承的类都是这样的:

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 :(得分:1)

结束@ ivan-stoev的查询过滤器建议并将其附加到Context构造函数。下面是后人的代码。

using Z.EntityFramework.Plus;

...

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