2012-09-19 6 views
4

내 .edmx 파일에 클라이언트라는 엔터티가 있습니다.기본 필터가 EF 인 엔터티

필자는 여러 번 linq querys를 실행해야하지만 모두 필터가 필요합니다 (active = 1로 말하십시오).

모든 쿼리에 where c.active == 1을 갖고 싶지 않아 내 엔티티에 기본 필터가 적용되어 있다는 것이 더 합리적입니다. 할 수있는 일인가요?

또는 테이블 대신 엔티티의 기본 쿼리를 사용할 수 있습니까? (나는 데이터베이스의 첫 번째 접근에있어)

DB에 뷰를 만들고 뷰에 엔티티를 연결하는 다른 해결책이 있다는 것을 알고 있지만 그 중 하나도 필요하지 않습니다.

partial class DatabaseContext // same name as your generated context 
{ 
    IQueryable<Client> ActiveClients { get { return Clients.Where(c => c.active == 1); } } 
} 

을 그리고 코드 전반에 걸쳐 사용 :

+0

해당 엔티티도 수정 하시겠습니까? 활성화되지 않은 클라이언트에 액세스 하시겠습니까? –

+0

아니요,이 응용 프로그램의 경우 비활성 클라이언트가 존재하지 않는 것처럼 – Diego

+0

가능한 [Entity Framework에 전역 필터를 적용하는 방법?] (http://stackoverflow.com/questions/2624597/how-to-apply-global- filter-on-entity-framework) –

답변

2

당신은 생성 된 데이터베이스 환경에 추가적인 방법을 추가 할 수 있습니다. 부분 클래스 (생성 된 컨텍스트 클래스 이외의 다른 파일에 정의되어 있음)의 일부이므로 스키마를 새로 고칠 때 codegen 도구의 영향을받지 않습니다.

+2

괜찮 았지만 탐색 속성에는 작동하지 않습니다. 자동으로 모든 것을 적용하지는 않습니다. – usr

+0

좋은 아이디어 Bartosz 같은데. @ 당신, 당신의 진술을 명확히 할 수 있습니까? 왜 작동하지 않을까요? – Diego

+1

@Diego 이렇게하면'Employee e; e.Clients '(직원과 고객간에 1 : n으로 가정). 이 표현식은 또한 비활성 표현식을 리턴합니다. 나는 Bartosz가 제안한 것을하지 않았으며 조만간이 작물의 필요성을 알게되었다. – usr

관련 문제