基本上,我想使用软删除,但导航属性不显示软删除记录。有没有办法拦截实体框架中POCO对象的导航属性查询?
很简单的例子:
public class Product
{
public int Id { get; set;}
public string Name { get; set;}
public int? CategoryId { get; set;}
public virtual Category Category { get; set;}
public bool IsDeleted { get; set;}
}
public class Category
{
public int Id{ get; set; }
public string Name { get; set; }
public virtual ICollection<Product> Products { get; set;}
}
我可以轻松地将标准插入到我的存储库中,这样它就不会返回任何IsDeleted == true的产品。
但是,我无法看到如何在其导航属性中具有“软删除”的其他对象中完成此操作。
IE如果我访问myCategory.Products(其中myCategory是一个类别),它不应该显示任何IsDeleted == true的产品
我可以使用Category
的附加属性来解决此问题public ICollection<Product> CurrentProducts
{
get
{
return this.Products.Where(p=>!p.IsDeleted);
}
}
但这不是我正在寻找的优雅解决方案。有没有办法将标准“附加”到导航属性或任何更好的解决方案来处理这个问题?
答案 0 :(得分:2)
也许你应该看看这个from another perspective。可能有帮助。当然不会受伤。 :)
答案 1 :(得分:0)
public class CategoryWithNoDeletedItems : Category
{
private ICollection<Product> _products;
public override ICollection<Product> Products
{
get
{
return _products;
}
set
{
if (value.Any(x => x.IsDeleted))
{
_products = value.Where(x => !x.IsDeleted).ToArray();
}
else
{
_products = value;
}
}
}
}