2011-01-05 37 views
11

基本上,我想使用軟刪除,但具有導航屬性不顯示軟刪除的記錄。有什麼方法可以攔截實體框架中POCO對象的導航屬性查詢嗎?軟刪除,EF4中的導航屬性CTP5 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地方真正==。

但是,我看不到如何爲導航屬性中具有「軟刪除」實體的其他對象完成此操作。

也就是說,如果我訪問myCategory.Products(其中myCategory是一個類別)它不應該表現出任何產品請將isDeleted地方真正==

我可能會解決這個使用類別的一個附加屬性

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

但這並不是我正在尋找的優雅解決方案。有沒有辦法將'標準'附加到導航屬性或任何更好的解決方案如何處理?

+0

啊現在我看到你的問題... :) – gingerbreadboy 2011-01-05 14:51:59

+0

我會說你提出的解決方案是最好的。不知道爲什麼你不認爲它是優雅的?對我來說似乎很乾淨簡單。 – 2011-01-11 14:05:01

+0

你有沒有找到辦法解決這個問題?我遇到了同樣的情況,並想知道你採取了什麼方法。 – muruge 2011-03-21 22:36:12

回答

2

也許你應該看看from another perspective。可能有幫助。當然不會傷害。 :)

+0

+1非常有趣的鏈接,雖然沒有回答技術問題,但只關注業務 – k3b 2011-01-09 13:01:13

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