如何";选择";用nhibernate 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();

我想使用queryover返回一个对象

 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>();