我有一个带有以下构造函数UserDTO
的DTo类public UserDTO(User user)
。我还创建了一个NHibernate查询,该查询检索IList<TodoDTO>
,其中每个TodoDTO
具有以下属性public IList<UserDTO> ResponsibleUsers { get; set; }
。
我想知道在我的查询中是否可以在UserDTO
上使用此构造函数,所以像这样:
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>();
构造函数如下所示:
public UserDTO(User user) {}
问题在于,当我运行此代码时,UserDTO
构造函数中user
的参数为空。
答案 0 :(得分:1)
在查询语法中调用构造函数(或任何其他代码)将不起作用。这里的实体仅用于解析sql查询的表和列。调用这些对象的方法的能力是误导性的......
您可以使用Projection从一个或多个数据库实体中选择数据到新对象(在您的情况下:到UserDTO)
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 >();