NHibernate - LazyLoad一对多

时间:2009-05-20 19:43:59

标签: nhibernate fluent-nhibernate nhibernate-mapping

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找到) 为什么会这样?

希望你有一个答案我真的坚持这个。

1 个答案:

答案 0 :(得分:1)

我的猜测是,这是因为没有员工的班次会有一个空的Employee代理。 NHibernate看到空代理并尽职尽责地尝试从数据库加载数据。

至于解决方案,看看你的映射确实会有所帮助。但是,您可以尝试确保关系具有fetch =“join”属性设置或关闭此关系的延迟加载。