2015-04-02 68 views
3

我想使用名爲Deleted的字段來保護我的實體,以避免客戶端真正刪除任何實體。如果他試圖刪除,唯一的事情是,entity.Deleted = true;在DbSet中創建預濾波器層

的問題是,無論我不想包含已刪除的實體,我需要使用

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

我知道我可以使用方法是這樣我控制器

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)將是巨大的任何意見工作。

回答

0

看起來像這個人試圖完成一些非常相似的事情。看看Jon Skeet的解釋:extension for DbSet