2016-06-16 1 views
2

값 객체가 포함 NULL 값 쿼리 :은 NHibernate에이 -이 같은 값 객체가

public class PersonMapping : ComponentMap<Person> 
{ 
    public PersonMapping() 
    { 
     Map(x => x.FirstName).Not.Nullable().Length(96); 
     Map(x => x.LastName).Not.Nullable().Length(96); 
     Map(x => x.MiddleName).Nullable().Length(96); 
     Map(x => x.NickName).Nullable().Length(64); 
    } 
} 

난과 같이 쿼리를 만들기 :

var owner = new Person("Anneliese", "ObjectOfficer_1"); 
var query = NhSession.Query<ServiceContract>() 
       .Where(s => s.ObjectOfficer.Manager == owner); 
contracts = query.ToList(); 

이것은있다 Person의 인스턴스를 생성 null 미들 네임과 닉네임. 잘못

select ..... 
from ..... 
where (objectoffi1_.FirstName = @p0 
     and objectoffi1_.LastName = @p1 
     and objectoffi1_.MiddleName = @p2 
     and objectoffi1_.NickName = @p3); 
    @p0 = 'Anneliese' [Type: String (4000)], 
    @p1 = 'ObjectOfficer_1' [Type: String (4000)], 
    @p2 = NULL [Type: String (4000)], 
    @p3 = NULL [Type: String (4000)] 

없음 기록 경기 : NHibernate에 쿼리과 같이 만듭니다. 내가 생성 된 쿼리를 변경하고 그래서 같은 값으로 매개 변수를 교체 할 때

는 :

... 
where (objectoffi1_.FirstName = 'Anneliese' and objectoffi1_.LastName = 'ObjectOfficer_1' 
and objectoffi1_.NickName is null and objectoffi1_.MiddleName is null) 

그것을 결과의 정확한 수를 반환합니다. 아무도이 문제를 어떻게 처리 할 수 ​​있는지 아니? NHibernate가 필드 = NULL 대신에 필드가 MS SQL Server에 대해 null 인 경우 wrong TSQL이므로 결과가 반환되지 않습니다. 어떤 아이디어?

+0

어떤 nhibernate 버전을 사용하고 있으며 mssqldialect는 무엇입니까? – Jehof

+0

최신 버전, NH 4.0.4.4000, FNH 2.0.3, SQL Dialect 2012, SQL Server 2014는 내가 사용하지만 2012는 NH에서 지원하는 최신 버전입니다. – ThommyB

답변

0

where 절에 nullable 속성이있는 값 개체를 배치 할 수 없다는 사실이 밝혀졌습니다. 코드에서 이러한 잠재적 인 null 값에 대해 신경 써야합니다. 필드를 필드별로 직접 비교하면 필드가 작동합니다. 다음은 '올바른'버전 :

var query = NhSession.Query<ServiceContract>() 
       .Where(s => s.ObjectOfficer.Manager.FirstName == owner.FirstName 
          && s.ObjectOfficer.Manager.LastName == owner.LastName); 
contracts = query.ToList(); 

내가이 그냥 불편보다 더 많은 생각과 같은 EF와 같은 다른 ORM들을 같은 문제가 있다면 나도 몰라. 가치 객체는 DDD의 중요한 빌딩 블록입니다.