NHibernate初学六之关联多对多关系
1:创建三张表T_Course、T_Student、T_Middle;其中一个学生可以对应多个课程,一个课程也可以对应多个学生,用T_Middle存放它们的关系内容;

CREATE TABLE [dbo].[T_Course](
[ID] [int] IDENTITY(1,1) NOT NULL,
[CourseName] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_T_Course] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] CREATE TABLE [dbo].[T_Student](
[ID] [int] IDENTITY(1,1) NOT NULL,
[Name] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
[StudentNum] [varchar](50) COLLATE Chinese_PRC_CI_AS NULL,
CONSTRAINT [PK_T_Student] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY] CREATE TABLE [dbo].[T_Middle](
[ID] [int] IDENTITY(1,1) NOT NULL,
[StudentID] [int] NULL,
[CourseID] [int] NULL,
CONSTRAINT [PK_T_Middle] PRIMARY KEY CLUSTERED
(
[ID] ASC
)WITH (IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

![]() |
![]() |
![]() |
2:实体的代码,其中两个类中都有IList,中间关系类就不用创建的:

public class CourseModel
{
public virtual int Id { get; set; }
public virtual string Coursename { get; set; }
public virtual IList Students { get; set; }
} public class StudentModel
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual string Studentnum { get; set; }
public virtual IList Courses { get; set; }
}

3:XML映射文件的内容
3.1 CourseModel.hbm.xml文件的内容:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Wujy.ModelLibrary" namespace="Wujy.ModelLibrary.Entity" xmlns="urn:nhibernate-mapping-2.2">
<class name="CourseModel" table="T_Course" lazy="true" >
<id name="Id" column="ID">
<generator class="identity" />
</id>
<property name="Coursename">
<column name="CourseName" sql-type="varchar" not-null="false" />
</property>
<bag name="Students" table="T_Middle" lazy="true" inverse="true">
<key column="CourseID"></key>
<many-to-many column="StudentID" class="StudentModel"></many-to-many>
</bag>
</class>
</hibernate-mapping>

3.2 StudentModel.hbm.xml文件的内容:

<?xml version="1.0" encoding="utf-8"?>
<hibernate-mapping assembly="Wujy.ModelLibrary" namespace="Wujy.ModelLibrary.Entity" xmlns="urn:nhibernate-mapping-2.2">
<class name="StudentModel" table="T_Student" lazy="true" >
<id name="Id" column="ID">
<generator class="identity" />
</id>
<property name="Name">
<column name="Name" sql-type="varchar" not-null="false" />
</property>
<property name="Studentnum">
<column name="StudentNum" sql-type="varchar" not-null="false" />
</property>
<bag name="Courses" table="T_Middle" lazy="true" inverse="false">
<key column="StudentID"></key>
<many-to-many column="CourseID" class="CourseModel"></many-to-many>
</bag>
</class>
</hibernate-mapping>

注意:inverse:意思是反转,它指明类之间的关系由谁来进行维护。例如:班级(Class类)与学生(Student),班级-学生就是one-to-many,学生-班级就是many-to-one。它只能在 one-to-many中many的一方进行设置(当然,在many一方,可能是在<set>也可能是在<bag>也可能是在<array>中进行设置),而对于one方,是不进行Inverse设置的。在NHibernate 社区,inverse默认值为false。
4: 主要代码如下

protected void Button1_Click(object sender, EventArgs e)
{
CourseModel coursemodel = new CourseModel();
StudentModel studentModel = new StudentModel();
coursemodel.Coursename = "软件工程";
int CID = CourseBll.NewAdd(coursemodel); studentModel.Name = "踏浪帅";
studentModel.Studentnum = "20098991";
studentModel.Courses = new List<CourseModel>();
studentModel.Courses.Add(coursemodel);
StudentBll.NewAdd(studentModel); } protected void Button2_Click(object sender, EventArgs e)
{
CourseModel coursemodel = new CourseModel();
coursemodel.Coursename = "软件工程";
CourseBll.Add(coursemodel);
} protected void Button3_Click(object sender, EventArgs e)
{
StudentModel model = StudentBll.findById(1);
StudentBll.Remove(model);
}

感谢您的阅读,坚持每天进步一点点,离成功就更新一步;希望文章对您有所帮助;源代码下载
转载至:http://www.cnblogs.com/wujy/p/3602300.html
NHibernate初学六之关联多对多关系的更多相关文章
- NHibernate初学五之关联一对多关系
1:创建两张表T_Country.T_Person:其中T_Person表中有一个CountryID对应T_Country的ID,一个Country可以对应多个Person CREATE TABLE ...
- 用NHibernate处理带属性的多对多关系
1.引言 老谭在面试开发者的时候,为了考察他们的数据库开发能力,经常祭出我的法宝,就是大学数据库教程中讲到的一个模式:学生选课.这个模式是这种: 在这个模式中,学生(Student)和课程(Cours ...
- NHibernate初学四之关联一对一关系
1:数据库脚本,创建两张表T_Area.T_Unit,表示一个单位对应一个地区,在单位表中有个AreaID为T_Area表中的ID: CREATE TABLE [dbo].[T_Area]( [ID] ...
- Hibernate框架学习(六)——一对多&多对一关系
一.关系表达 1.表中的表达 2.实体中的表达 3.orm元数据中的表达 一对多:(在Customer.hbm.xml中添加) 多对一:(在LinkMan.hbm.xml中添加) 最后别忘了在hibe ...
- [NHibernate]多对多关系(关联查询)
目录 写在前面 文档与系列文章 多对多关系关联查询 总结 写在前面 上篇文章介绍了nhibernate中对一对多关系进行关联查询的几种方式,以及在使用过程需要注意的问题.这篇文章对多对多关系的查询处理 ...
- [转]NHibernate之旅(11):探索多对多关系及其关联查询
本节内容 多对多关系引入 多对多映射关系 多对多关联查询 1.原生SQL关联查询 2.HQL关联查询 3.Criteria API关联查询 结语 多对多关系引入 让我们再次回顾在第二篇中建立的数据模型 ...
- NHibernate系列文章十九:NHibernate关系之多对多关系(附程序下载)
摘要 NHibernate的多对多关系映射由many-to-many定义. 从这里下载本文的代码NHibernate Demo 1.修改数据库 添加Product表 添加ProductOrder表 数 ...
- ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第六章:管理产品图片——多对多关系(上篇)
在这章中,我们将学习如何创建一个管理图片的新实体,如何使用HTML表单上传图片文件,并使用多对多关系将它们和产品关联起来,如何将图片存储在文件系统中.在这章中,我们还会学习更加复杂的异常处理,如何向模 ...
- Hibernate 、多表关联映射 - 多对多关系映射(many-to-many)
hibernate.cfg.xml: <hibernate-configuration> <session-factory name="sessionFactory&quo ...
随机推荐
- 【Maven】Maven的安装与入门使用
它也是实现项目各个环节的好帮手,如编译.单元测试.打包.发布,等等.按照它的流程走,可以让我们养成严谨的习惯. 同时,我们用得很多的是用它下载JAR,想想以前,以前框架的包都是自己一个一个爬官网下载的 ...
- Qt入门-layout布局
开发一个图形界面应用程序,界面的布局影响到界面的美观.在设计一个界面之前,应该考虑到开发的界面可能给不用的用户使用,而用户的屏幕大小.纵横比例.分辨率可能不同,界面还可能是可缩放的,程序应该可以适应这 ...
- JAVA-JSP声明语句
相关资料: <21天学通Java Web开发> 结果总结: 1.<%! %>声明的变量为全局变量. 实例代码: <html> <head> <ti ...
- 面试-存储过程与Insert的性能比较
相关资料: 1.http://blog.itpub.net/28713356/viewspace-1220826/2.http://www.west.cn/www/info/28183-1.htm 1 ...
- 计时器,主要讲了setInterval()和Date()方法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 一款纯css3实现的漂亮的404页面
之前为大家分享了那些创意有趣的404页面, html5和css3打造一款创意404页面, HTML5可爱的404页面动画很逗的机器人.今天再给大家分享一款纯css3实现的漂亮的404页面.效果图如下: ...
- 一款基于jquery的侧边栏导航
之前为大家介绍了好多导航菜单,今天给大家分享一款基于jquery的侧边栏导航.这款导航侧边滑出,适合放在手机网页或webapp.一看下实现的效果图: 在线预览 源码下载 实现的代码. html代码 ...
- 关于Java开发过程中质量提升-2自动化
开发人员写代码过程中就实现自动代码检视,编辑器会提示编码规范错误,并给出正确实例,写完代码只需要提交到SVN库,然后启动自动化构建(可配置代码提交SVN后自动触发),测试环境中的项目马上和当前SVN库 ...
- 使用HttpWebRequest调用wcf一段代码
public class HttpClass { internal static HttpWebRequest _httpWebRequest; public static void Request( ...
- Android——TextView属性XML详解
Android_TextView属性XML详解 博客分类: android 属性名称 描述 android:autoLink 设置是否当文本为URL链接/email/电话号码/map时 ...


