2011-09-26 114 views
0

我在表ACCOUNT和表USER之间有父/子数据库关系。目前,我已映射双向流利的映射是这样的:NHibernate父子映射

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"); 

在实践中我不能预见,我会希望从用户实体引用帐户实体。同样,我无法预见我想要从父帐户实体加载所有用户实体。我对NHibernate相当陌生,想知道上面的方法仍然是性能明智的最佳方式吗?双向关系是首选,我应该只参考Id吗?谢谢

回答

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