2011-01-05 22 views
11

Zasadniczo chcę użyć miękkich operacji usuwania, ale właściwości navgiation nie pokazują miękkich usuniętych rekordów. Czy są jakieś sposoby przechwytywania zapytań o właściwości nawigacyjne obiektów POCO w strukturze encji?Miękkie operacje usuwania, właściwości nawigacji w EF4 CTP5 POCO

Bardzo prosty przykład:

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

mogę łatwo wstawić kryteria do mojego repozytorium tak, że nie zwraca żadnych produktów gdzie IsDeleted == true.

Jednak nie widzę, jak to osiągnąć w przypadku innych obiektów, które mają "miękkie usunięte" obiekty w ich właściwościach nawigacyjnych.

IE Gdybym dostęp myCategory.Products (gdzie myCategory jest kategoria) nie powinny wykazywać żadnych produktów gdzie IsDeleted == true

mógłbym potencjalnie obejść to za pomocą dodatkowego własność Kategoria

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

Ale to nie jest eleganckie rozwiązanie, którego szukam. Czy istnieje sposób, aby "dołączyć" kryteria do właściwości nawigacji lub lepsze rozwiązania, jak sobie z tym poradzić?

+0

Ahh teraz widzę twój problem ... :) – gingerbreadboy

+0

Powiedziałbym, że proponowane przez ciebie rozwiązanie jest najlepsze. Nie wiesz, dlaczego nie uważasz, że jest elegancka? Wydaje mi się całkiem czysty i prosty dla mnie. –

+0

Czy znalazłeś sposób, aby do tego podejść? Opieram się na tym samym scenariuszu i chciałbym wiedzieć, jakie podejście podjąłeś. – muruge

Odpowiedz

2

Może powinieneś spojrzeć na to from another perspective. Może pomóc. Na pewno nie zaszkodzi. :)

+0

+1 bardzo interesujący link, chociaż w ogóle nie odpowiada na pytanie techniczne, ale koncentruje się na biznesie – 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; 
      } 
     } 
    } 
} 
Powiązane problemy