Ответ 1
Возможно, вам стоит посмотреть на с другой точки зрения. Может помочь. Конечно, не повредит.:)
В принципе, я хочу использовать мягкие удаления, но свойства навигации не показывают мягкие удаленные записи. Существуют ли способы перехвата запросов свойств навигации для объектов 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.
Однако я не вижу, как это сделать для других объектов, которые имеют "мягкие удаленные" entites в своих свойствах навигации.
IE Если я получаю доступ к myCategory.Products(где myCategory является категорией), он не должен показывать какие-либо продукты, где IsDeleted == true
Я могу потенциально обойти это, используя дополнительное свойство Category
public ICollection<Product> CurrentProducts
{
get
{
return this.Products.Where(p=>!p.IsDeleted);
}
}
Но это не элегантное решение, которое я ищу. Есть ли способ "прикрепить" критерии к свойствам навигации или к каким-либо лучшим решениям, как справиться с этим?
Возможно, вам стоит посмотреть на с другой точки зрения. Может помочь. Конечно, не повредит.:)
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;
}
}
}
}