我所有实体继承的类都是这样的:
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")
。
答案 0 :(得分:1)
结束@ ivan-stoev的查询过滤器建议并将其附加到Context构造函数。下面是后人的代码。
using Z.EntityFramework.Plus;
...
public MyContext() : base("MyContext")
{
this.Filter<EntityBase>(q => q.Where(x => x.Status != "Deleted"));
}