Iam在与NHibernate及其懒惰的挣扎中挣扎。
我有一个简化的结构,但它显示了我的问题。
Class Shift {
int ShiftID;
DateTime ShiftStart;
Employee Employee;
}
Class Employee {
int EmployeeID;
string Name;
}
数据:
ShiftData
ID SHIFTTIME EmployeeID (int)
1 12:00 0
2 13:00 1
3 14:00 0
4 13:00 3
Employees
ID NAME
1 Morten
2 Peter
3 Henrik
我的转换加载策略是使用Join,这样当我加载轮班时,NHibernate会自动执行Left联接以获取客户。 这适用于随员工的轮班,但有些班次尚未招聘任何员工。
当我尝试在加载班次后访问此类班次的员工时,会导致对数据库的另一个SELECT(通过使用您的NHProfiler找到) 为什么会这样?
希望你有一个答案我真的坚持这个。
答案 0 :(得分:1)
我的猜测是,这是因为没有员工的班次会有一个空的Employee
代理。 NHibernate看到空代理并尽职尽责地尝试从数据库加载数据。
至于解决方案,看看你的映射确实会有所帮助。但是,您可以尝试确保关系具有fetch =“join”属性设置或关闭此关系的延迟加载。