2014-11-14 3 views
1

우리 제품에는 IsDeleted 플래그가있어 제품을 삭제할 때 데이터베이스에 남아있게됩니다. (그들은 단지 삭제 된 것으로 표시됩니다)IsDeleted 플래그가있는 모든 엔터티 무시 - 열 집합

서버를 쿼리 할 때 삭제 된 플래그를 확인하는 것은 귀찮습니다 (c.IsDeleted == False & & ...). 이것을 중앙 집중화 할 방법이 있습니까? DbContainer/Context 또는 다른 곳에서?

+0

당신은 인터페이스를 만들고 일반적인 방식으로 필터링 할 수 있도록, 당신의 엔티티에 그것을 적용 할 수 있습니다. 이는 자식 엔티티에서는 작동하지 않지만 적절한 쿼리를 작성하기 위해 리플렉션을 통해 표현식을 작성하거나 삭제 된 하위 엔티티를 메모리에서 제거해야합니다. – CodeCaster

+1

여기 엔티티 프레임 워크에 대한 소프트 삭제 솔루션을 게시했습니다. http://stackoverflow.com/a/18985828/150342 – Colin

+1

다른 옵션은 [EntityQueryFilterCollection] (http://drc.ideablade.com/ApiDocumentation2012)을 사용하는 DevForce EntityServerQueryInterceptor입니다. /IdeaBlade.EntityModel~IdeaBlade.EntityModel.EntityQueryFilterCollection.html). –

답변

1

다른 해결책은 확장 방법을 사용하는 것입니다. 이것은 정확히 집중화되지는 않지만 캡슐화됩니다.

public static IQueryable<T> Undeleted(this IQueryable<T> queryable) 
    where T : ISoftDeletable 
{ 
    return queryable.Where(x => !x.IsDeleted); 
} 

인터페이스 :

public interface ISoftDeletable 
{ 
    bool IsDeleted { get; } 
} 

사용법 :

var undeleteds = myEntitySet.Undeleted().ToArray(); 
+0

그게 옵션이지만, 당신이 말했듯이 나는 여전히 쿼리를 만들 때마다 그것을 사용해야합니다 :) – Jannik