NHibernate父子映射

时间:2011-09-26 22:52:50

标签: nhibernate mapping parent relationship

我在表ACCOUNT和表USER之间有父/子数据库关系。目前我已经映射了这样的双向Fluent映射:

public class Account {
  public virtual IList<User> ListUsers { get; private set; }

  public virtual void AddUser(User user)
  {
    user.Account = this;
    ListUsers.Add(user);
  }
}

MAPPING: HasMany(x => x.ListUsers).Table("UserInfo").KeyColumn("Id_Account").Inverse().Cascade.All().AsList();

public class User {
  public virtual Account Account { get; set; }
  public string Username { get; set; } 
}

MAPPING: References(x => x.Account).Column("Id_Account");

在实践中,我无法预见到我将要从User实体引用Account实体。同样,我无法预见我想从父帐户实体加载所有用户实体。我对NHibernate相当新,并且想知道上述方法仍然是性能明智的最佳方法吗?是双向关系的首选,我应该只参考ID吗?感谢

1 个答案:

答案 0 :(得分:1)

    在我看来,
  1. 双向引用正确的方法。如果您在Account属性上使用延迟加载,那么它只会加载帐户的ID。
  2. 您指定ListUsers属性为inverse=true,这意味着User实体负责保存引用。因此,我相信(如果我没记错的话)行ListUsers.Add(user);不是必需的,因为关联将由User实体创建。
    因此,这意味着您在添加用户时无需从数据库加载整个ListUsers集合。