关于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

 

 

 

 

 

 

 /Files/xyjblog/NHibernate/关于NHibernate中关系表的操作.doc

 

 

posted @ 2010-05-29 19:48  xyj  阅读(1014)  评论(2编辑  收藏  举报