2011-08-21 2 views
5

EF 쿼리 adn에서 이상한 동작이 나타납니다. 왜 발생하는지 궁금합니다. 다음 코드와 나는 어떤 결과를 얻을하지 않습니다엔티티 프레임 워크 null 값의 쿼리

if (category.Parent == null) 
{ 
    return Db.EventCategories.Where(c => c.Parent == null); 
} 

차이점은 무엇입니까 :

if (category.Parent == null) 
{ 
    return Db.EventCategories.Where(c => c.Parent == category.Parent); 
} 

하지만이 코드는 예상 된 결과를 반환하지

? null가 항상 null가 아닌가? 또는 EF는 값이 nullable 일 때 다른 요소로 처리합니다 (Parent는 int 유형입니까?).

+0

실제로 쿼리를 실행하기 전에'category' 객체를 수정합니까? – svick

+0

아니요, 아닙니다. 당신이 상수 null을 사용하지 않는 경우 @ a1ex01이 맞다고 생각합니다. IS NULL 쿼리를 생성하지 않습니다 – willvv

+0

생성 된 SQL을 확인 했습니까? – svick

답변

2

나는 100 % 확신 할 수는 없지만 첫 번째 명령문은 SELECT ... FROM category, eventcategories WHERE category.parent = eventcategories.parent (category.parent가 null 인 경우 빈 레코드 세트를 반환 함)과 같은 것을 생성하지만 두 번째는 ... WHERE eventcategories.parent IS NULL입니다.

0

자세한 내용은 NULL Value Handling in Entity Framework을 참조하십시오. EF 5.0, 6.0 및 6.1에서는 nullable 값을 다르게 처리합니다. EF 5.0에서는 수동으로 null을 테스트해야합니다. 두 변수 간의 방정식 비교는 기본적으로 널을 테스트하지 않습니다. UseCSharpNullComparisonBehavior 속성을 수동으로 DbContext.ContextOptions에서 사용하여 동일한 효과를 얻을 수도 있습니다. EF 6.0에서는 기본적으로 Null 비교가 설정되지만 지나치게 공격적이거나 심지어 null이 아닌 열의 경우에도 성능이 저하됩니다. EF 6.1은 필요한 경우에만 null을 테스트하기 위해 알고리즘을 조정해야합니다.