2014-09-09 2 views
0

저는 기본적으로 데이터베이스에 저장된 문자열 값 집합에서 EF 쿼리를 생성하는 비즈니스 규칙 엔진을 설계하려고합니다.동적 EF 쿼리

예 : 연결 문자열, 테이블 이름, where 조건 술어 및 select 술어를 db의 문자열 필드로 저장하고 EF 쿼리를 동적으로 구성하려고합니다. 예 :

var db = new DbContext(“connectionstring”); 

var wherePredicate = Expression.FromString(“p => p.StartDate > new DateTime(2014,5,1)) 
var selectPredicate = Expression.FromString(“p => p”) 

var results = db.Set(“Projects”).Where(wherepredicate).Select(selectPredicate) 

나는 동적 표현식 또는 동적 LINQ 라이브러리를 사용할 수 있습니다.

그러나 Projects가 엔티티 이름 인 db.Set ("Projects")에 액세스하려면 어떻게하고 where 및 select 술어를 적용합니까? (또는 db[“Projects”].Where().Select과 같은 것).

DbContext.Set(Type entityttype) 메서드의 제네릭이 아닌 버전을 시도했지만 반환 된 개체에 WhereSelect 조건부를 적용하는 방법을 파악할 수 없습니다.

SQL 쿼리 생성을 피하고 대신 동적으로 생성 된 EF 코드를 사용하려고합니다.

+0

엔티티 프레임 워크의 모든 이점을 잃어 가고있는 것처럼 보입니다. – Aducci

답변

0

이것은별로 의미가 없습니다. 리플렉션을 사용하는 제네릭 유형 대신 string에서 작동하는 메소드를 만들 수 있지만 DBSet<T>이 아닌 DbSet을 반환해야합니다. 그리고 그 중 하나에서 LINQ의 메소드 (기본적으로)를 실행할 수 없습니다. 왜냐하면 컴파일하는 동안 타입이 없기 때문입니다. 물론 당신은 반사를 사용하여 모든 방법으로 그것을 할 수 있습니다, 그렇다면, 왜 ??? O/R 매퍼가 당신을 위해하는 것의 90 %를 잃어 버리고 있습니다.