从 NHibernate QueryOver SelectList 调用对象构造函数
Calling an object constructor from NHibernate QueryOver SelectList
我有一个 DTo class UserDTO
具有以下构造函数 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
为空。
在查询语法中调用构造函数(或任何其他代码)将不起作用。此处的实体仅用于解析 table 和 sql 查询的列。调用这些对象的方法的能力具有误导性...
您可以使用投影 select 从一个或多个数据库实体到新对象的数据(在您的情况下:到 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 >();
我有一个 DTo class UserDTO
具有以下构造函数 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
为空。
在查询语法中调用构造函数(或任何其他代码)将不起作用。此处的实体仅用于解析 table 和 sql 查询的列。调用这些对象的方法的能力具有误导性...
您可以使用投影 select 从一个或多个数据库实体到新对象的数据(在您的情况下:到 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 >();