【发布时间】:2015-12-22 11:00:54
【问题描述】:
我需要将三个一对多关系从同一个表加载到其他三个表。以下是我的表的 ERD:
ProcessActionLog是与ProcessActionEmail、ProcessActionInterviewFeedback和ProcessActionNotesInfo三个一对多关系的表基于 ProcessActionType 列的表将包含列的名称以下是我对这些表的映射:
1) ProcessActionLog 表映射:
class ProcessActionLogMap : ClassMap<ProcessActionLog>
{
public ProcessActionLogMap()
{
//Rest of mappings//
HasMany(x => x.ProcessActionEmail).Cascade.SaveUpdate().Inverse();
HasMany(x => x.ProcessActionInterviewFeedback).Cascade.SaveUpdate().Inverse();
HasMany(x => x.ProcesssActionNotesInfo).Cascade.SaveUpdate().Inverse();
}
2) ProcessActionEmailMapping:
class ProcessActionEmailMap : ClassMap<ProcessActionEmail>
{
public ProcessActionEmailMap()
{
//rest of mappings//
References(x => x.ProcessActionLog, "ProcessActionLogId");
}
}
3) ProcessActionInterviewFeedback 映射:
class ProcessActionInterviewFeedbackMap : ClassMap<ProcessActionInterviewFeedback>
{
public ProcessActionInterviewFeedbackMap()
{
//Rest of mappings//
References(x => x.ProcessActionLog, "ProcessActionLogId");
}
}
4) ProcessActionNotesInfo
class ProcessActionNotesInfoMap : ClassMap<ProcessActionNotesInfo>
{
public ProcessActionNotesInfoMap()
{
//Rest of mappings//
References(x => x.ProcessActionLog, "ProcessActionLogId");
}
}
现在我尝试了以下查询,以便立即加载所有三个关系:
public IList<ProcessActionLog> FetchUserSpecificProcessActionLogs(int UserId)
{
return _session.Query<ProcessActionLog>()
.Where(x => x.MasterUser.Id == UserId)
.Fetch(x => x.ProcessActionEmail)
.Fetch(x => x.ProcessActionInterviewFeedback)
.Fetch(x => x.ProcesssActionNotesInfo)
.ToFuture().ToList<ProcessActionLog>();
}
但这给了我以下错误:
Cannot simultaneously fetch multiple bags.
请帮助我解决此问题或建议我可以使用 ProcessActionLog 表的 processActionType 列急切加载实体的任何其他方法。谢谢。
【问题讨论】:
标签: asp.net linq nhibernate fluent-nhibernate nhibernate-mapping