Обратимое удаление, свойства навигации в 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.

Однако я не вижу, как это сделать для других объектов, у которых в свойствах навигации есть объекты с «обратимым удалением».

IE Если я получаю доступ к myCategory.Products (где myCategory является категорией), он не должен отображать продукты, где IsDeleted == true

Я мог бы потенциально обойти это, используя дополнительное свойство категории

public ICollection<Product> CurrentProducts
{
    get
    {
         return this.Products.Where(p=>!p.IsDeleted);
    }
}

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


person James Harris    schedule 05.01.2011    source источник
comment
Ааа, теперь я вижу вашу проблему... :)   -  person gingerbreadboy    schedule 05.01.2011
comment
Я бы сказал, что решение, которое вы предлагаете, является лучшим. Не знаете, почему вы не думаете, что это элегантно? Мне кажется довольно чистым и простым.   -  person James Gaunt    schedule 11.01.2011
comment
Вы нашли способ приблизиться к этому? Я сталкиваюсь с тем же сценарием и хотел бы знать, какой подход вы выбрали.   -  person muruge    schedule 22.03.2011


Ответы (1)


Возможно, Вам стоит взглянуть на это с другой точки зрения. Может помочь. Конечно не повредит. :)

person Arnis Lapsa    schedule 05.01.2011
comment
+1 очень интересная ссылка, хотя вообще не отвечает на технический вопрос, а фокусируется на бизнесе - person k3b; 09.01.2011