当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > many-to-many多对多映射

ASP.NET
asp.net(c#)网页跳转七种方法小结
完美解决在ModalPopupExtender中使用CalendarExtender时被层遮挡的问题
ASP.NET、SharePoint中另存文件的长文件名被截断的原因及解决办法
查看Json输出的*最方便*的方法 (转)
asp.net 代码隐藏的编码模型
ajaxpro.dll 控件实现异步刷新页面
asp.net DbProviderFactory的使用-示例
一个简单的asp.net 单点登录实现
jQuery+Ajax用户登录功能的实现
asp.net 弹出对话框返回多个值
.NET 中英文混合验证码实现代码
一个完整的ASP.NET 2.0 URL重写方案[翻译]
asp.net关于onpropertychange和oninput事件实现代码
asp.net gridview指定某一列滚动
Equals和==的区别 公共变量和属性的区别小结
asp.net 合并GridView中某列相同信息的行(单元格)
ASP.NET(C#) 定时执行一段代码
asp.net 预防SQL注入攻击之我见
asp.net下将Excel转成XML档的实现代码
asp.net url分页类代码

ASP.NET 中的 many-to-many多对多映射


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-03   浏览: 133 ::
收藏到网摘: n/a


多对多关系在数据库也是比较常见的,它通过一个中间表将两个主表关联起来。下面来看看多对多关联在nhibernate的实现,示例是一个用户和组之间的多对多关联。先来看看用户类的映射信息:
在多对多定义中,定义了中间表为UserGroups,此表只有两个字段:user_id和group_id;用于关联Users和Groups表。用户类的定义: public class User { public User() { } public int UserId { get { return userId; } set { userId = value; } } public int Name { get { return name; } set { name = value; } } public IDictionary Groups { get { return groups; } set { groups = value; } } private int userId; private string name; private IDictionary groups = new Hashtable();} //class User这里用一个数据字典IDictionary对角来保存组对象。再来看看组类的映射信息:

这里many-to-many的定义和用户类映射信息中的差不多。组类的定义: public class Group { public Group() { } public int GroupId { get { return groupId; } set { groupId = value; } } public int Name { get { return name; } set { name = value; } } public int Description { get { return description; } set { description = value; } } public IDictionary Users { get { return users; } set { users = value; } } private int userId; private string name; private IDictionary groups = new Hashtable();} //class User注意:多对多没有主次之分,保存时的两边都要save。下面给出部分测试代码。 public TestCreate() { User user1 = new User(); user1.Name = "test1"; User user2 = new User(); user2.Name = "test2"; Group group1 = new Group(); group1.Name = "group1"; Group group2 = new Group(); group2.Name = "group2"; user1.Groups.Add( group2, group2 ); user2.Groups.Add( group1. group1 ); group1.Users.Add( user2, user2 ); group2.Users.Add( user1, user1 ); ITransactioin trans = null; try { trans = session.BeginTransaction(); Session.Save( user1 ); Session.Save( user2 ); Session.Save( group1 ); Session.Save( group2 ); trans.Commit(); } catch ( Exception e ) { if ( trans != null ) trans.Rollback(); throw e; } finally { session.Close(); }}以上测试代码中session的相关操作请查看相关文档。