Я хочу использовать запрос, чтобы вернуть мне объект
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; }
}
Попробуйте 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();
результат: 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();
Результат: 188 курсов со всеми свойствами, имеющими практически одинаковую ошибку
'((new System.Collections.Generic.Mscorlib_CollectionDebugView<Domain.PlannerTask>(result)).Items[0].Course).CoursePermissions' threw an exception of type '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_
Результат:
CoursePermissions = '((Castle.Proxies.CourseProxy)((new System.Collections.Generic.Mscorlib_CollectionDebugView<PlannerTask>(result)).Items[0].Course)).CoursePermissions' threw an exception of type 'NHibernate.ObjectNotFoundException'
Попробуйте 4
Попробуйте 4
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_
Работает.Я могу получить доступ ко всему в объекте курса.
Кажется, есть проблема с
tAlias.PersonalTaskReminders и tAlias.TaskReminders.Если я уберу эти Курсы, то все будет хорошо.
Я не понимаю, почему.