우리 제품에는 IsDeleted 플래그가있어 제품을 삭제할 때 데이터베이스에 남아있게됩니다. (그들은 단지 삭제 된 것으로 표시됩니다)IsDeleted 플래그가있는 모든 엔터티 무시 - 열 집합
서버를 쿼리 할 때 삭제 된 플래그를 확인하는 것은 귀찮습니다 (c.IsDeleted == False & & ...). 이것을 중앙 집중화 할 방법이 있습니까? DbContainer/Context 또는 다른 곳에서?
우리 제품에는 IsDeleted 플래그가있어 제품을 삭제할 때 데이터베이스에 남아있게됩니다. (그들은 단지 삭제 된 것으로 표시됩니다)IsDeleted 플래그가있는 모든 엔터티 무시 - 열 집합
서버를 쿼리 할 때 삭제 된 플래그를 확인하는 것은 귀찮습니다 (c.IsDeleted == False & & ...). 이것을 중앙 집중화 할 방법이 있습니까? DbContainer/Context 또는 다른 곳에서?
다른 해결책은 확장 방법을 사용하는 것입니다. 이것은 정확히 집중화되지는 않지만 캡슐화됩니다.
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();
그게 옵션이지만, 당신이 말했듯이 나는 여전히 쿼리를 만들 때마다 그것을 사용해야합니다 :) – Jannik
당신은 인터페이스를 만들고 일반적인 방식으로 필터링 할 수 있도록, 당신의 엔티티에 그것을 적용 할 수 있습니다. 이는 자식 엔티티에서는 작동하지 않지만 적절한 쿼리를 작성하기 위해 리플렉션을 통해 표현식을 작성하거나 삭제 된 하위 엔티티를 메모리에서 제거해야합니다. – CodeCaster
여기 엔티티 프레임 워크에 대한 소프트 삭제 솔루션을 게시했습니다. http://stackoverflow.com/a/18985828/150342 – Colin
다른 옵션은 [EntityQueryFilterCollection] (http://drc.ideablade.com/ApiDocumentation2012)을 사용하는 DevForce EntityServerQueryInterceptor입니다. /IdeaBlade.EntityModel~IdeaBlade.EntityModel.EntityQueryFilterCollection.html). –