关于NHibernate中关系表的操作
Nhibernate中的inverse属性负责维护关系表。
数据关系图
 
单方维护关系表
        /// <summary>
        /// 1)创建User
        /// 2)建立Group并将User添加到Group.Users中
        /// 3)创建Group
        /// </summary>
        private static void CreateGroupAndUser()
        {
            string username = "User_" + Guid.NewGuid().ToString().Substring(0, 8);
            string groupname = "Group_" + Guid.NewGuid().ToString().Substring(0, 8);
            UserDAL userDAL = new UserDAL(SessionManager_NHibernateSample.GetSession());
            UserModel user = new UserModel();
            user.UserName = username;
            int userId = userDAL.CreateUser(user);
            GroupModel group = new GroupModel();
            group.GroupName = groupname;
            group.Users = new Iesi.Collections.Generic.HashedSet<UserModel>();
            group.Users.Add(user);
            GroupDAL groupDAL = new GroupDAL(SessionManager_NHibernateSample.GetSession());
            int groupId = groupDAL.CreateGroup(group);
        }
上述代码中,如果想让group.Users.Add(user);执行时自动往关系表UserGroup中插入关系数据,则:
GroupMode.hbm.xml中的inverse属性应该设置为false
UserMode.hbm.xml中的inverse属性应该设置为true
如下图所示:
         inverse 属性为 false 表示我来维护关系表。
inverse 属性为 true 表示对方维护关系表。
        /// <summary>
        /// 1)创建Group
        /// 2)建立User并将Group添加到User.Groups中
        /// 3)创建User
        /// </summary>
        private static void CreateUserAndGroup()
        {
            string username = "User_" + Guid.NewGuid().ToString().Substring(0, 8);
            string groupname = "Group_" + Guid.NewGuid().ToString().Substring(0, 8);
            GroupModel group = new GroupModel();
            group.GroupName = groupname;
            GroupDAL groupDAL = new GroupDAL(SessionManager_NHibernateSample.GetSession());
            int groupId = groupDAL.CreateGroup(group);
            UserModel user = new UserModel();
            user.UserName = username;
            user.Groups = new Iesi.Collections.Generic.HashedSet<GroupModel>();
            user.Groups.Add(group);
            UserDAL userDAl = new UserDAL(SessionManager_NHibernateSample.GetSession());
            int userId = userDAl.CreateUser(user);
}
按照第一个代码的说法,如果想让user.Groups.Add(group);执行时自动往关系表UserGroup中插入关系数据,则:
UserMode.hbm.xml中的inverse属性应该设置为false
GroupMode.hbm.xml中的inverse属性应该设置为true
双方都维护关系表
将双方的inverse属性都设置为false
最后
inverse属性的默认值为false
 
                    
                 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号