2012-09-13 5 views
1

Entity Framework 4.1을 사용하여 ASP.Net MVC 3 응용 프로그램을 개발 중입니다. 실행해야하는 특정 복합 쿼리의 경우 원시 SQL 쿼리를 작성하여 dbSet.SqlQuery 메서드에 전달하기로 결정했습니다.Entity Framework 4.1 Raw SQL

나는 이라는 문자열 변수에 SQL 쿼리를 할당하는 서비스 메소드가 있습니다. 쿼리가 두 개의 매개 변수를 전달할 때 SQL 주입을 방지하기 위해 이러한 매개 변수를 매개 변수화했습니다.

public IList<User> GetAvailableLocums(int shiftID, int shiftDateID) 
{ 
      var query ="Select .... where t1 = @p0 and t2 = @p1"; 

      ObjectParameter _shiftID = new ObjectParameter("p0", shiftID); 
      ObjectParameter _shiftDateID = new ObjectParameter("p1", shiftDateID); 

      object[] parameters = new object[] { _shiftID, _shiftDateID }; 


      return _UoW.User.GetWithRawSql(query, parameters).ToList(); 
} 

그런 다음 쿼리와 매개 변수를 저의 쿼리를 실행하는 저장소의 메서드에 전달합니다.

public IEnumerable<TEntity> GetWithRawSql(string query, params object[] parameters) 
{ 
      return dbSet.SqlQuery(query, parameters).ToList(); 
} 

나는 매핑이 개체에서 존재하지 않는이 코드

를 실행하려고하면 그러나, 나는 현재 다음과 같은 오류가 나는 SQL Server 관리 Studio에서 테스트 한대로 쿼리가 정확한지 알고 알려진 관리 공급자 기본 유형 System.Data.Objects.ObjectParameter 을 입력

사람이 내가이 문제를 해결할 수있는 방법에 대한 어떤 제안이 있습니까?

도움 주셔서 감사합니다.

답변

8

밥상

문제

는 내 매개 변수를 만들 수 ObjectParameter를 사용하던 것이 었습니다. 나는 이것을 SqlParameter으로 바꾸 었으며 정상적으로 작동했습니다. 아래를 참조하십시오.

SqlParameter _shiftID = new SqlParameter("p0", shiftID); 

ObjectParameter _shiftID = new ObjectParameter("p0", shiftID); 

에서 변경 그리고 그것은했다. 희망이 다른 사람을 도와줍니다.

0

빠른 Google 검색을 통해 친한 친구처럼 보입니다. 귀하의 SQL 쿼리에 대한 반환 유형을 설정하지 않은 것 같아요 :

return dbSet.SqlQuery<TEntity>(query, parameters).ToList(); 

이것은 단지 매핑하는 방법을 알려줍니다.

+0

죄송합니다. 해결책이 아닙니다. – tgriffiths

관련 문제