2009-09-29 1 views
2

시스템에서 논리 삭제를 사용하고 있으며 데이터베이스에 대한 모든 호출을 자동으로 필터링하고 싶습니다.LinQ 엔티티를 사용할 때 DataContext가 작성한 모든 호출을 필터링하십시오.

하자 나는 다음과 같은 방법으로 데이터베이스에서 데이터를로드하고있어 말 :

product.Regions 

를 따라서 나 추가 할 수 있도록 아닌 EntitySet<Region> 아닌 사용자 정의 방법은 내가 Regions 이후 모든 요청을 필터링 할 수있는 방법 isDeleted = 0

은 지금까지 나는 AssociateWith을 발견하지만 각 테이블에 대해 한 줄의 코드를 작성해야 싫어 -> 현재 프로젝트의 협회 ... 난 에이로 찾고 있어요

ther 일반적인 람다 식을 구축하거나 .. 다른 뭔가?

+0

답변을 찾으시기 바랍니다. 나는 얼마나 자주 필자가 ".Where (i => i.IsVisible)"를 작성했는지 기억하지 못한다. : p – JustLoren

+1

이것은 전혀 도움이되지 않지만 NHibernate에서는 필터를 사용하거나 매핑의 조건을 사용하는 것이 매우 간단하다. ... – Rashack

+0

+1 당신이 나를 위해 린크는 SQL에 Linq가 유일한 OR/M 및 가끔은 솔루션을 너무 쉽게 얻을 수 없다는 것을 상기 언급에 대한) – Mathlec

답변

0

Product 클래스와 Region 클래스 간의 관계를 사용하고있는 것처럼 보입니다. 예를 들어, 당신은 여기에 접근 일부 로직을 넣을 수

[Table(Name = "Product")] 
public partial class Product 
{ 
    ... 
    private EntitySet<Region> _Regions; 
    [Association(Storage = "_Regions")] 
    public EntitySet<Region> Regions 
    { 
     get { return this._Regions; } 
     set { this._Regions.Assign(value); } 
    } 
    ... 
} 

: 만약 그렇다면, 어딘가, (대한하면 .dbml 파일이 자동으로 생성 LINQ - 투 - SQL)의 관계를 정의하는 매핑이 존재 :

public IEnumerable<Region> Regions 
{ 
    get { return this._Regions.Where(r => !r.isDeleted); } 
    set { this._Regions.Assign(value); } 
} 

이렇게하면 product.Regions를 통해 액세스 할 때마다 필터링 된 Enumerable이 반환됩니다.

+0

내 DBML 내 entites 사이의 관계가 있습니다. 당신의 아이디어는 좋은 것이지만, 나는 각 관계에 대해 수동으로 "필터"를 추가해야 할 것입니다 !! 나는 좀 더 일반적인 것을 찾고있다. – Mathlec

+0

그리고 btw, this._Rions.Where는 EntitySet이 아닌 IEnumerable을 반환합니다. – Mathlec

1

필터를 구현하는 확장 메서드를 만들어 규칙으로 사용할 수 있습니다.

public static class RegionQuery 
{ 
    public static IQueryable<Region> GetAll(this IQueryable<Region> query, bool excludeDeleted=true) 
    { 
     if (excludeDeleted) 
      return query.Regions.Where(r => !r.isDeleted); 

     return query.Regions; 
    } 
} 

그래서 지역을 쿼리 할 때마다 다음과 같이 전화를 걸어 라이브 지역 만 가져 와서 삭제 된 장소에 접근 할 수 있습니다.

context.Regions.GetAll(); 

내 제품 속성에 액세스하기에는 약간의 괴롭힘을 당할 수 있지만 여전히 실행 가능합니다. 국제 대회를 준수해야하는 유일한 문제입니다. 또는 포함하는 클래스를 확장합니다.

someProduct.Regions.GetAll(); 

도움이 되었기를 바랍니다. 이것이 내가 간접적으로 더 많은 것을 만들지 못했기 때문에 해결책을 찾을 수 없었기 때문에 내가 정착하게 된 것입니다. 당신이나 다른 누군가가이 문제에 대한 해결책을 생각해 내면 알려주세요. 나는 매우 흥미 롭다.

관련 문제