을 생성하지 않습니다. 필자의 연구를 통해 적어도 EF 4.1 이후로 EF 쿼리의 .ToString() 메서드가 SQL이 실행되도록 반환한다는 것을 발견했습니다. 사실,이 작업은 Entity Framework 5 및 6을 사용하여 매우 자주 수행됩니다.Entity Framework 쿼리 ToString은 SQL 쿼리
그러나 때때로이 메서드를 호출하고 쿼리 개체의 런타임 형식을 가져옵니다.
Entity input = ...;
IQueryable<Entity> query = dbContext.SetOfEntity.Where(e => e.Prop == input.Prop);
보다 구체적으로는, 내가 VS2013에서 중단 점을 설정하고 쿼리 개체를 가리키면, 그 쿼리를 실행하는 SQL 대신 System.Data.Entity.Infrastructure.DbQuery<Namespace.Entity>
를보고 있어요 : 은 여기 내 특정 예이다. 흥미롭게도 DBSet 속성 (dbContext.SetOfEntity
) 위로 마우스를 가져 가면 을 수행하고은 관련된 테이블의 기본 선택 SQL을 참조하십시오. SQL을 잃어버린 결과를 필터링 할 때만입니다.
분명히 이것은 매우 간단한 쿼리이므로 SQL을 직접 해결할 수 있지만이 문제는보다 복잡한 쿼리에서 발생하며 서버에 보내지는 SQL을 디버깅 할 수 있으면 좋을 것입니다. 데이터베이스 추적을 실행 중입니다.
일부 배경
백, 나는 EF5와 (이) 일 것 같았다 있으며, toString를 사용하는 동안. EF6으로 전환하기 직전에 쿼리의에 SQL이 표시되었지만 EF6으로 전환 한 후 올바른 동작으로 되돌아갔습니다. 또한 IQueryable 쿼리를 가리키고 IDE의 "결과보기"기능을 사용하려고하면 "어린이를 평가할 수 없습니다"라는 메시지가 나타납니다. 이것은 별개의 문제 일지 모르지만, 일반적인 원인이있는 경우에 대비하여 포함시킬 것이라고 생각합니다.
EF6에서 ['DbContext.Database.Log']에 로그를 추가 할 수 있습니다 (http://msdn.microsoft.com/en-us/library/system.data.entity.database.log%28v = vs.113 % 29.aspx) 올바른 대리인을 할당하십시오. 모든 실행 된 SQL은 삽입, 업데이트 등을 포함하여 기록됩니다. –
나는 과거에도 같은 문제가있었습니다. 필자가 실수로 LINQ-to-objects 쿼리를 처음의 SELECT * 쿼리의 맨 위에서 수행했기 때문에 LINQ-to-objects와 마찬가지로 쿼리의 실제 개체가 다르고 (SQL-free) , 그래서 거기에 없었습니다. 결국 내가 잘못하고있는 것을 발견하고 내 쿼리를 수정했습니다. 문제가되는 쿼리 및/또는 쿼리 클라이언트 측의 일부를 실수로 수행하지 않았는지 확인하기 위해 할당되는 유형을 검토하는 것이 좋습니다. –
@martin_costello 저는이 질문에있는 질문과 거의 동일한 쿼리를보고 있습니다. (이 질문은 'Entity'와'Prop'에 대한 도메인 별 이름을 가지고 있습니다.)이 문제가 있습니다. 'Where'는 IQueryable 함수이고'DbQuery' 타입이므로, Linq-to-objects가 될 수있는 방법이 있는지 확실하지 않습니다. – EnvisionAndDevelop