在DbSet中创建预过滤层

时间:2015-04-02 19:40:09

标签: c# entity-framework-5

我想使用名为Deleted的字段来保护我的实体,以免客户端真正删除任何实体。如果他尝试删除,那么唯一的就是entity.Deleted = true;

问题在于,我不希望包含已删除的实体,我需要使用

db.Entities.Where(e => e.Deleted == false).WhateverMethod();

我知道我可以在我的Controller中使用这样的方法

private IQueryable<Entity> GetNotDeletedEntity() {
        return db.Entities.Where(e => e.Deleted == false);
}

并更改db.Entities.WhateverMethod()的每GetNotDeletedEntity().WhateverMethod(),但我对我来说似乎很奇怪。

一个注意事项是GetNotDeletedEntity()返回IQueryable,db.Entities返回DbSet。这种不一致可能是将来的一个问题。

我认为有一种方法可以将DbSet扩展为像这样工作

db.Entities // include all entities

db.NotDeletedEntities // include only entities e.Deleted == false

关于如何干.Where(e => e.Deleted == false)的任何建议都会很棒。

1 个答案:

答案 0 :(得分:0)

似乎这个家伙试图完成非常相似的事情。请看一下Jon Skeet的解释:extension for DbSet