2011-01-05 15 views
11

Temel olarak, yumuşak silme kullanmak istiyorum, ancak silme kayıtlarının yumuşak silme kayıtlarını gösterme özelliği yoktur. Varlık çerçevesinde POCO nesneleri üzerinde gezinme özelliği sorgularını engellemenin herhangi bir yolu var mı?Yumuşak silme, gezinme özellikleri EF4 CTP5 POCO içinde

Çok basit bir örnek: nerede isDeleted == true herhangi bir ürün iade etmeyecek şekilde

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

Kolayca benim depoya kriterlerini ekleyebilir. Bununla birlikte, gezinme özelliklerinde 'yumuşak silme' olan diğer nesneler için bunu nasıl gerçekleştireceğimi göremiyorum.

IE ben myCategory.Products (myCategory bir Kategori olduğu) isDeleted == true

Ben potansiyel Kategori ek bir özelliği kullanılarak geçici çözüm olabilir nerede herhangi bir ürün gösterilmemesi gerekir erişirseniz

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

Ama aradığım zarif çözüm bu değil. Gezinme mülküne 'ekleme' kriterleri veya bunun nasıl ele alınacağı konusunda daha iyi çözümler var mı?

+0

Ahh şimdi sorununuzu görüyorum ... :) – gingerbreadboy

+0

Önerdiğim çözümün en iyisi olduğunu söyleyebilirim. Bunun neden zarif olmadığını düşündüğünden emin değil misiniz? Bana oldukça temiz ve basit görünüyor. –

+0

Buna yaklaşmanın bir yolunu buldunuz mu? Aynı senaryoya koşuyorum ve hangi yaklaşımı kullandığınızı bilmek istiyorum. – muruge

cevap

2

Belki de bu from another perspective'a bakmalısınız. Yardımcı olabilir. Kesinlikle acımayacak. :)

+0

+1 çok ilginç bir bağlantı olmasına rağmen teknik soruya cevap vermese de iş odaklı – 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; 
      } 
     } 
    } 
} 
İlgili konular