NHibernate-懒散负载一到零

NHibernate-懒散负载一到零,nhibernate,fluent-nhibernate,nhibernate-mapping,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我正与NHibernate及其懒散的工作做斗争 我简化了一个结构,但它显示了我的问题 Class Shift { int ShiftID; DateTime ShiftStart; Employee Employee; } Class Employee { int EmployeeID; string Name; } 数据: 我的班次加载策略是使用连接,这样当我加载班次时,NHibernate会自动执行左连接以获取客户。 这非常适合有员工的班次,但是有些班次还没有员工 当我尝试在加

我正与NHibernate及其懒散的工作做斗争

我简化了一个结构,但它显示了我的问题

Class Shift {
 int ShiftID;
 DateTime ShiftStart;
 Employee Employee;
}

Class Employee {
 int EmployeeID;
 string Name;
}
数据:

我的班次加载策略是使用连接,这样当我加载班次时,NHibernate会自动执行左连接以获取客户。 这非常适合有员工的班次,但是有些班次还没有员工

当我尝试在加载班次后访问该班次的员工时,会导致对数据库进行另一次选择(通过使用您的NHProfiler发现) 为什么会发生这种情况


希望你能给我一个答案。我真的被困在这个问题上了。

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


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

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


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

实际上我已经尝试了很多。执行连接,在类和引用上都转换惰性负载。public ShiftMap(){Not.LazyLoad();WithTable(“shift_db”);Id(x=>x.Id,“shift_Id”)。WithUnsavedValue(0);Map(x=>x.Starttime,“shift_start”);References(x=>x.Employee,“shift_Employee”).Join().NotFound.Ignore().Not.LazyLoad();}实际上我试了很多次。执行连接,在类和引用上都转换惰性负载。public ShiftMap(){Not.LazyLoad();WithTable(“shift_db”);Id(x=>x.Id,“shift_Id”)。WithUnsavedValue(0);Map(x=>x.Starttime,“shift_start”);References(x=>x.Employee,“shift_Employee”).Join().NotFound.Ignore().Not.LazyLoad();}EmployeeID是否应该为null而不是0?EmployeeID是否应该为null而不是0?
 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