2011-01-05 33 views
11

Về cơ bản, tôi muốn sử dụng xóa mềm, nhưng có thuộc tính điều hướng không hiển thị bản ghi đã xóa mềm. Có cách nào để chặn các truy vấn thuộc tính điều hướng trên các đối tượng POCO trong khung thực thể không?Xóa mềm, thuộc tính điều hướng trong EF4 CTP5 POCO

Rất đơn giản ví dụ:

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

tôi có thể dễ dàng chèn các tiêu chí vào kho lưu trữ của tôi vì vậy mà nó không trả lại bất kỳ sản phẩm mà IsDeleted == true.

Tuy nhiên, tôi không thể xem cách thực hiện điều này cho các đối tượng khác có các ký tự 'xóa mềm' trong thuộc tính điều hướng của chúng.

IE Nếu tôi truy cập myCategory.Products (nơi myCategory là một loại) nó không nên hiển thị bất kỳ sản phẩm mà IsDeleted == true

tôi có thể có khả năng workaround này sử dụng một tài sản bổ sung của loại

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

Nhưng đó không phải là giải pháp tao nhã mà tôi đang tìm kiếm. Có cách nào để 'đính kèm' tiêu chí vào tài sản chuyển hướng hoặc bất kỳ giải pháp tốt hơn cho làm thế nào để xử lý này?

+0

Ahh bây giờ tôi thấy vấn đề của bạn ... :) – gingerbreadboy

+0

Tôi sẽ nói giải pháp bạn đề xuất là tốt nhất. Bạn không chắc chắn lý do tại sao bạn không nghĩ rằng nó là thanh lịch? Có vẻ khá sạch sẽ và đơn giản với tôi. –

+0

Bạn có tìm cách tiếp cận điều này không? Tôi đang chạy vào cùng một kịch bản và muốn biết cách tiếp cận bạn đã thực hiện. – muruge

Trả lời

2

Có thể bạn nên xem số from another perspective này. Có thể giúp. Chắc chắn sẽ không đau. :)

+0

+1 liên kết rất thú vị mặc dù không trả lời câu hỏi kỹ thuật, nhưng tập trung vào kinh doanh – k3b

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; 
      } 
     } 
    } 
} 
Các vấn đề liên quan