考虑这两个类之间的关系
public class Order
{
public int OrderId {get;set;}
public int CustomerId {get;set;} // Should this be here?
public Customer Customer{get;set}
}
public class Customer
{
public int CustomerId {get;set;}
public string Name {get;set;}
}
我知道我不需要Order上的CustomerId属性,并且我同意这不是最漂亮的 OO 做事方式。只有 Customer 属性,我可以轻松地请求Order.Customer.CustomerId来获取客户的 ID。
但在这种情况下,NHibernate 将触发对数据库的请求以加载该客户,并且有一些(实际上很多)情况我只需要Order的CustomerId。在这种情况下,Order类中的CustomerId将很有用,并且需要更少的访问数据库。(如果我对此有误,请纠正我)。
问题 1:有没有办法告诉 NHibernate 我希望这两个属性总是更新?
属性CustomerId将始终具有客户的 Id,并且只有在我愿意时才会由惰性加载属性Customer(假设获取客户的姓名)。Microsoft Entity Framework 允许这样做。
问题2:如果不可能,我应该担心这个吗?
更新
按照答案说明,我做了一个测试,试图检查为什么(在我的情况下)NHibernate 没有按预期工作,并发现了一些有趣的东西:如果我不使用 Accessor,NHibernate 默认不会在 Order.Customer.CustomerId 访问数据库。映射CustomerId 属性的字段。
使用默认访问器,它可以按预期工作。知道为什么吗?