如何";选择";用nhibernate queryover
我想使用queryover返回一个对象如何";选择";用nhibernate queryover,nhibernate,queryover,Nhibernate,Queryover,我想使用queryover返回一个对象 public class TaskMap : ClassMap<Task> { public TaskMap() { Table("Tasks"); Id(x => x.TaskId); Map(x => x.TaskName).NvarcharWithMaxSize().Not.Nullable();
public class TaskMap : ClassMap<Task>
{
public TaskMap()
{
Table("Tasks");
Id(x => x.TaskId);
Map(x => x.TaskName).NvarcharWithMaxSize().Not.Nullable();
Map(x => x.Description).NvarcharWithMaxSize();
Map(x => x.DueDate).Not.Nullable();
HasMany(x => x.PersonalTaskReminders).Inverse();
HasMany(x => x.TaskReminders).Inverse();
References(x => x.Course).Not.Nullable();
HasMany(x => x.CompletedTasks);
}
}
[Serializable()]
public class Task
{
public virtual int TaskId { get; private set; }
public virtual string TaskName { get; set; }
public virtual string Description { get; set; }
public virtual DateTime DueDate { get; set; }
public virtual IList<PersonalTaskReminder> PersonalTaskReminders { get; set; }
public virtual IList<TaskReminder> TaskReminders { get; set; }
public virtual IList<CompletedTask> CompletedTasks { get; set; }
public virtual Course Course { get; set; }
public Task()
{
PersonalTaskReminders = new List<PersonalTaskReminder>();
TaskReminders = new List<TaskReminder>();
CompletedTasks = new List<CompletedTask>();
}
}
public class PlannerTask
{
public int TaskId { get; set; }
public string TaskName { get; set; }
public string Description { get; set; }
public DateTime DueDate { get; set; }
public List<PersonalTaskReminder> PersonalTaskReminders { get; set; }
public List<TaskReminder> TaskReminders { get; set; }
public Course Course { get; set; }
public bool IsCompleted { get; set; }
}
公共类任务映射:类映射
{
公共任务图()
{
表(“任务”);
Id(x=>x.TaskId);
Map(x=>x.TaskName).NvarcharWithMaxSize().Not.Nullable();
Map(x=>x.Description).NvarcharWithMaxSize();
Map(x=>x.DueDate).Not.Nullable();
HasMany(x=>x.PersonalTaskEmilments).Inverse();
HasMany(x=>x.task提醒);
引用(x=>x.Course).Not.Nullable();
有许多(x=>x.CompletedTasks);
}
}
[可序列化()]
公开课任务
{
公共虚拟int TaskId{get;private set;}
公共虚拟字符串TaskName{get;set;}
公共虚拟字符串描述{get;set;}
公共虚拟日期时间DueDate{get;set;}
公共虚拟IList PersonalTaskMemendars{get;set;}
公共虚拟IList任务提醒{get;set;}
公共虚拟IList CompletedTasks{get;set;}
公共虚拟课程{get;set;}
公共任务()
{
PersonalTaskEmployments=新列表();
任务提醒=新列表();
CompletedTasks=新列表();
}
}
公共类计划任务
{
public int TaskId{get;set;}
公共字符串TaskName{get;set;}
公共字符串说明{get;set;}
公共日期时间DueDate{get;set;}
公共列表个人任务提醒{get;set;}
公共列表任务提醒{get;set;}
公共课程{get;set;}
公共布尔已完成{get;set;}
}
尝试1
Task tAlias = null;
PlannerTask plannerTask = null;
List<PlannerTask> result = session.QueryOver<Task>(() => tAlias)
.Select(x => x.Course).TransformUsing(Transformers.AliasToBean<PlannerTask>())
.List<PlannerTask>().ToList();
Task tAlias=null;
PlannerTask PlannerTask=null;
列表结果=session.QueryOver(()=>tAlias)
.Select(x=>x.Course).TransformUsing(Transformers.AliasToBean())
.List().ToList();
结果:课程对象的188条记录全部为空
尝试2次
Task tAlias = null;
PlannerTask plannerTask = null;
List<PlannerTask> result = session.QueryOver<Task>(() => tAlias)
.Select(Projections.Property(() => tAlias.TaskId).WithAlias(() => plannerTask.TaskId),
Projections.Property(() => tAlias.TaskName).WithAlias(() => plannerTask.TaskName),
Projections.Property(() => tAlias.DueDate).WithAlias(() => plannerTask.DueDate),
Projections.Property(() => tAlias.Description).WithAlias(() => plannerTask.Description),
Projections.Property(() => tAlias.PersonalTaskReminders).WithAlias(() => plannerTask.PersonalTaskReminders),
Projections.Property(() => tAlias.TaskReminders).WithAlias(() => plannerTask.PersonalTaskReminders),
Projections.Property(() => tAlias.Course).WithAlias(() => plannerTask.Course))
.TransformUsing(Transformers.AliasToBean<PlannerTask>())
.List<PlannerTask>().ToList();
Task tAlias=null;
PlannerTask PlannerTask=null;
列表结果=session.QueryOver(()=>tAlias)
.Select(Projections.Property(()=>tAlias.TaskId)。使用别名(()=>plannerTask.TaskId),
Projections.Property(()=>tAlias.TaskName).with别名(()=>plannerTask.TaskName),
Projections.Property(()=>tAlias.DueDate).WithAlias(()=>plannerTask.DueDate),
Projections.Property(()=>tAlias.Description).WithAlias(()=>plannerTask.Description),
Projections.Property(()=>tAlias.PersonalTaskEmendments).WithAlias(()=>plannerTask.PersonalTaskEmendments),
Projections.Property(()=>tAlias.TaskEmendments).WithAlias(()=>plannerTask.PersonalTaskEmendments),
Projections.Property(()=>tAlias.Course).WithAlias(()=>plannerTask.Course))
.TransformUsing(Transformers.AliasToBean())
.List().ToList();
结果:188门课程的所有属性都有几乎相同的错误
'((new System.Collections.Generic.Mscorlib_CollectionDebugView<Domain.PlannerTask>(result)).Items[0].Course).CoursePermissions' threw an exception of type 'NHibernate.ObjectNotFoundException'
”((new System.Collections.Generic.Mscorlib_CollectionDebugView(result)).Items[0]。Course.CoursePermissions”引发了类型为“NHibernate.ObjectNotFoundException”的异常
尝试3次
Task tAlias = null;
PlannerTask plannerTask = null;
List<PlannerTask> result = session.QueryOver<Task>(() => tAlias)
.Select(Projections.Property(() => tAlias.TaskId).WithAlias(() => plannerTask.TaskId),
Projections.Property(() => tAlias.TaskName).WithAlias(() => plannerTask.TaskName),
Projections.Property(() => tAlias.DueDate).WithAlias(() => plannerTask.DueDate),
Projections.Property(() => tAlias.Description).WithAlias(() => plannerTask.Description),
Projections.ProjectionList().Add(Projections.Property(()=> tAlias.PersonalTaskReminders).WithAlias(() => plannerTask.PersonalTaskReminders)),
Projections.ProjectionList().Add(Projections.Property(()=> tAlias.TaskReminders).WithAlias(() => plannerTask.PersonalTaskReminders)),
Projections.Property(() => tAlias.Course).WithAlias(() => plannerTask.Course))
.TransformUsing(Transformers.AliasToBean<PlannerTask>())
.List<PlannerTask>().ToList();
SELECT this_.TaskId as y0_,
this_.TaskName as y1_,
this_.DueDate as y2_,
this_.Description as y3_,
this_.TaskId as y4_,
this_.TaskId as y4_,
this_.CourseId as y4_
FROM Tasks this_
Task tAlias=null;
PlannerTask PlannerTask=null;
列表结果=session.QueryOver(()=>tAlias)
.Select(Projections.Property(()=>tAlias.TaskId)。使用别名(()=>plannerTask.TaskId),
Projections.Property(()=>tAlias.TaskName).with别名(()=>plannerTask.TaskName),
Projections.Property(()=>tAlias.DueDate).WithAlias(()=>plannerTask.DueDate),
Projections.Property(()=>tAlias.Description).WithAlias(()=>plannerTask.Description),
Projections.ProjectionList().Add(Projections.Property(()=>tAlias.PersonalTaskEmendments).WithAlias(()=>plannerTask.PersonalTaskEmendments)),
Projections.ProjectionList().Add(Projections.Property(()=>tAlias.task提醒)。使用别名(()=>plannerTask.PersonalTask提醒)),
Projections.Property(()=>tAlias.Course).WithAlias(()=>plannerTask.Course))
.TransformUsing(Transformers.AliasToBean())
.List().ToList();
将此任务ID选择为y0,
此任务名为y1,
此决斗日期为y2,
此描述为y3,
此任务ID为y4,
此任务ID为y4,
本课程为y4_
从这个任务_
结果:
CoursePermissions = '((Castle.Proxies.CourseProxy)((new System.Collections.Generic.Mscorlib_CollectionDebugView<PlannerTask>(result)).Items[0].Course)).CoursePermissions' threw an exception of type 'NHibernate.ObjectNotFoundException'
CoursePermissions=”((Castle.Proxies.CourseProxy)((new System.Collections.Generic.Mscorlib_CollectionDebugView(result)).Items[0]。CoursePermissions'引发了类型为“NHibernate.ObjectNotFoundException”的异常
尝试4次
试试4
Task tAlias=null;
PlannerTask PlannerTask=null;
列表结果=session.QueryOver(()=>tAlias)
.Select(Projections.Property(()=>tAlias.TaskId)。使用别名(()=>plannerTask.TaskId),
Projections.Property(()=>tAlias.TaskName).with别名(()=>plannerTask.TaskName),
Projections.Property(()=>tAlias.DueDate).WithAlias(()=>plannerTask.DueDate),
Projections.Property(()=>tAlias.Description).WithAlias(()=>plannerTask.Description),
Projections.Property(()=>tAlias.Course).WithAlias(()=>plannerTask.Course))
.TransformUsing(Transformers.AliasToBean())
.List().ToList();
将此任务ID选择为y0,
此任务名为y1,
此决斗日期为y2,
此描述为y3,
本课程为y4_
从这个任务_
工作。我可以访问课程对象中的所有内容
它似乎有一个问题
tAlias.Personal任务提醒和tAlias.Task提醒。如果我把这些东西拿走
Task tAlias = null;
PlannerTask plannerTask = null;
List<PlannerTask> result = session.QueryOver<Task>(() => tAlias)
.Select(Projections.Property(() => tAlias.TaskId).WithAlias(() => plannerTask.TaskId),
Projections.Property(() => tAlias.TaskName).WithAlias(() => plannerTask.TaskName),
Projections.Property(() => tAlias.DueDate).WithAlias(() => plannerTask.DueDate),
Projections.Property(() => tAlias.Description).WithAlias(() => plannerTask.Description),
Projections.Property(() => tAlias.Course).WithAlias(() => plannerTask.Course))
.TransformUsing(Transformers.AliasToBean<PlannerTask>())
.List<PlannerTask>().ToList();
SELECT this_.TaskId as y0_,
this_.TaskName as y1_,
this_.DueDate as y2_,
this_.Description as y3_,
this_.CourseId as y4_
FROM Tasks this_
public class PlannerTask
{
public int TaskId { get; set; }
public string TaskName { get; set; }
public string Description { get; set; }
public DateTime DueDate { get; set; }
//flatten Course object
public int CourseId { get; set; }
public int CourseName { get; set; }
public bool IsCompleted { get; set; }
}
PlannerTask plannerTask = null;
Course courseAlias = null;
List<PlannerTask> result = session.QueryOver<Task>()
.JoinAlias(x => x.Course, () => courseAlias)
.SelectList(list => list
.Select(x => x.TaskId).WithAlias(() => plannerTask.TaskId)
.Select(x => x.TaskName).WithAlias(() => plannerTask.TaskName)
.Select(x => x.DueDate).WithAlias(() => plannerTask.DueDate)
.Select(x => x.Description).WithAlias(() => plannerTask.Description)
.Select(x => x.Course.Id).WithAlias(() => plannerTask.CourseId))
.Select(x => courseAlias.Name).WithAlias(() => plannerTask.CourseName))
.TransformUsing(Transformers.AliasToBean<PlannerTask>())
.List<PlannerTask>();