2017-10-11 7 views
1

다음과 같은 생성자 public UserDTO(User user)을 가진 DTo 클래스 UserDTO을 가지고 있습니다. 또한 각 TodoDTOpublic IList<UserDTO> ResponsibleUsers { get; set; }이있는 IList<TodoDTO>을 검색하는 NHibernate 쿼리를 만들었습니다.NHibernate QueryOver에서 객체 생성자 호출 SelectList

var responsibleUsers = session.QueryOver<UserTodo>() 
    .JoinAlias(ut => ut.User,() => userAlias) 
    .Where(ut => ut.Todo.Id.IsIn(_todos.Select(t => t.Id).ToArray())) 
    .Select(u => new UserDTO(userAlias)).ToList<UserDTO>(); 

생성자는 다음과 같습니다 : 내 쿼리에서 UserDTO에이 생성자에 가능할 것이다 경우 나는이 같은 일을 궁금
public UserDTO(User user) {}

문제는 내가 실행할 때이다 이 코드는 UserDTO 생성자 user의 매개 변수가 null입니다.

+0

이 코드를 실행하면 어떻게됩니까? –

+0

이것은 실제로 실행되는 코드가 아니며,이 코드는 내가하고 싶은 것에 대한 예제를 제공하기위한 것입니다. – Bunnynut

+0

@ChetanRanpariya 추가 세부 사항을 추가했습니다. – Bunnynut

답변

1

쿼리 구문에서 생성자 (또는 다른 코드)를 호출하면 작동하지 않습니다. 여기에있는 엔터티는 SQL 쿼리의 테이블과 열을 확인하는 데만 사용됩니다.

UserTodo userTodo = null 
UserDTO result = null; 
var responsibleUsers = session.QueryOver<UserTodo>(() => userTodo) 
.JoinAlias(ut => ut.User,() => userAlias) 
.Where(ut => ut.Todo.Id.IsIn(_todos.Select(t => t.Id).ToArray())) 
.SelectList(list => list 
    .Select(() => userAlias.FirstName).WithAlias(() => result.FirstName) 
    .Select(() => userAlias.UserId).WithAlias(() => result.IdOfUser) 
    .Select(() => userTodo.Age).WithAlias(() => result.Age) // if you require any values from UserTodo 
) 
.TransformUsing(Transformers.AliasToBean<UserDTO >()) 
.List<UserDTO >(); 
을 이러한 객체의 메소드를 호출 할 수있는 기능은

당신은합니다 (객체 인 UserDTO에 귀하의 경우) 새로운 객체에 여러 DB-엔티티를 하나의 데이터를 선택하기 위해 프로젝션을 사용하거나 수 ... missleading한다