Подтвердить что ты не робот

Мягкие удаления, навигационные свойства в EF4 CTP5 POCO

В принципе, я хочу использовать мягкие удаления, но свойства навигации не показывают мягкие удаленные записи. Существуют ли способы перехвата запросов свойств навигации для объектов 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);
    }
}

Но это не элегантное решение, которое я ищу. Есть ли способ "прикрепить" критерии к свойствам навигации или к каким-либо лучшим решениям, как справиться с этим?

4b9b3361

Ответ 2

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;
            }
        }
    }
}