0

저는 엔티티 프레임 워크의 새로운 초보자입니다.XXX에 대한 최상의 오버로드 된 메소드 일치에는 잘못된 인수가 있습니다.

나는 다음과 같은 방법을 쓰려고하지만 컴파일 시간 오류가 발생합니다.

protected static void EntitySQLQuery(AWEntities context) 
     { 
      string cmd = @"SELECT VALUE c FROM AWEntities.Person AS c WHERE c.FirstName = @FirstName"; 

      ObjectQuery<Person> persons = new ObjectQuery<Person>(cmd, context);//Error 


     } 

은 'System.Data.Objects.ObjectQuery.ObjectQuery (문자열, System.Data.Objects.ObjectContext)'에 가장 적합한 오버로드 된 메서드는 일부 잘못된 인수가

+1

첫 번째 인수가 좋아 보이므로 AWEntities가 실제로 System.Data.Objects.ObjectContext인지 아닌지 생각해 보셨습니까? 오류 텍스트에 따르면이 생성자의 두 번째 인수는 'System.Data.Objects.ObjectContext'여야합니다. –

+0

@JeppeStigNielsen ::'AWEntities'는'DbContext'에서 상속받은 공용 클래스입니다 –

+0

'DbContext'라고 말하면'System.Data.Entity.DbContext'입니까? 이 클래스는 생성자의 서명이 요구하는대로'System.Data.Objects.ObjectContext'에서 파생되지 않기 때문입니다. –

답변

1

의 정의를 살펴보십시오. 이것은 Entity Framework의 혼란스러운 점 중 하나입니다. ObjectContext는 2010 년경 EntityFramework를 수행하는 오래된 방법이라는 것을 깨달아야합니다. 이것은 DbContext (및 코드 우선) 이전이었습니다. 당신은 여전히 ​​다음과 같이 IOjbectContextAdapter에 DbContext를 주조하여 ObjectContext를 얻을 수 있습니다 : 쿼리는 다음과 같이 만들 것

((IObjectContextAdapter)context).ObjectContext; 

는 :

ObjectQuery<Person> persons = new ObjectQuery<Person>(cmd, ((IObjectContextAdapter)context).ObjectContext); 

나도 몰라 법인 구조적 쿼리는 승진하는 경우 더 이상. 가능한 경우 LInQ 사용을 고려할 것입니다.

var firstname = "Fred"; 
return from person in AWEntities.Person 
     where person.FirstName = firstname 
     select person; 

줄리 인형의 책을 읽는다면, 나는이 세 가지를 모두 선택하는 것이 좋습니다. 첫 번째 것은 모든 기본 사항을 설명하는 거대한 무덤이며 ObjectContext 방식으로 작성되었습니다. 두 번째 두 번째 코드는 오늘날의 코드 우선/dbcontext 세계에 더 실용적입니다.

2

AWEntities context 개체가 ObjectContext으로 통일되어 있지 않습니다. 개체 유형을 확인하십시오. ObjectContextObjectQuery's constructor

+0

'AWEntities'는'DbContext'를 상속받은 public 클래스입니다. –

관련 문제