博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nhibernate 3.0 cookbook学习笔记 一对多与多对多映射
阅读量:7080 次
发布时间:2019-06-28

本文共 4794 字,大约阅读时间需要 15 分钟。

1 一对多映射

还是用Movie与ActorRole来说明。我们假设一个Movie可以有多个ActorRole,而一个ActorRole只能对应一个Movie。

设置一对多映射主要是父类(Movie)要做相应的更改。我们在Movie类中要增加一个集合,用来表示该Movie下的所有ActorRole。

public class Movie : Product     {        public virtual string Director { get; set; }        //ActorRole集合,用于列举该Movie下的所有ActorRole        public virtual IList
Actors { get; set; } }

相应的我们的Movie.hbm.xml也要做相应的更改,增加一个list节点

ActorRole很简单,只有两个字段:

public class ActorRole : Entity     {        public virtual string Actor { get; set; }        public virtual string Role { get; set; }    }

对应的ActorRole.hbm.xml:

我们用一个方法向数据库中插入两条数据:

View Code
private void CreateMovies(ISession session)        {            session.Save(                new Movie()                {                    Name = "Raiders of the Lost Ark",                    Description = "Awesome",                    UnitPrice = 9.59M,                    Director = "Steven Spielberg",                    Actors = new List
() { new ActorRole() { Actor = "Harrison Ford", Role = "Indiana Jones" } } } ); session.Save( new Movie() { Name = "The Bucket List", Description = "Good", UnitPrice = 15M, Director = "Rob Reiner", Actors = new List
() { new ActorRole() { Actor = "Jack Nicholson", Role = "Edward Cole" }, new ActorRole() { Actor = "Morgan Freeman", Role = "Carter Chambers" } } } ); }

 

看下数据库中两张表的存储状况

在Product表中我们新增了两个Movie:

 

再看看ActorRole表:

可以看到ActorRole表中有三条记录,而后面两要是对应同个MoiveId的。

 

2 多对多映射

 多对多其实就是两个一对多,中间要生成第三张表来转换。我们用Movie与Actor来说明 。

 我们新增一个Actor类:

public class Actor : Entity    {        //姓名        public virtual string ActorName { get; set; }        //性别        public virtual bool ActorSex { get; set; }        //对应的Movie集合        public virtual IList
Movies { get; set; } }

设置对应的Actor.hbm.xml:

相应的修改Movie.cs,增加一个Actor集合:

public class Movie : Product     {        public virtual string Director { get; set; }        //ActorRole集合,用于列举该Movie下的所有ActorRole        public virtual IList
ActorRoles { get; set; } //Actor集合 public virtual IList
Actors { get; set; } }

修改Movie.hbm.xml,增加以下内容:

我们新增一个测试数据,通过新增Actor来新增Movie:

View Code
private void CreateActor(ISession session)        {            var movie1 = new Movie()            {                Name = "黄金大劫案",                Description = "喜剧",                UnitPrice = 10.59M,                Director = "宁浩",                ActorRoles = new List
() { new ActorRole() { Actor = "陶虹", Role = "芳蝶" }, new ActorRole() { Actor = "雷佳音", Role = "小东北" } }, }; var actor1 = new Actor() { ActorName = "陶虹", ActorSex = false, Movies = new List
() { movie1 } }; var actor2 = new Actor() { ActorName = "雷佳音", ActorSex = true, Movies = new List
() { movie1 } }; session.Save(movie1); session.Save(actor1); session.Save(actor2); }

 

执行后查看数据库

Actor表中数据,新增了两个记录:

 

再看看Product中的Movie记录,新增了一条:

 

最后是中间表MovieActor:

 

我们看到有两个ActorId对应同一个MoiveId.

当然我们也可以通过新增Movie来新增Actor,实现方法差不说,就不多说了。

源码下载:。

转载地址:http://lhpml.baihongyu.com/

你可能感兴趣的文章
码云推荐 | WEB 网页端在线流程设计器
查看>>
《编译与反编译技术实战》——第3章词法分析器的设计与实现
查看>>
《数据分析实战:基于EXCEL和SPSS系列工具的实践》一3.4.2 用专业工具处理
查看>>
MySQL运维之神奇的参数(终结篇)
查看>>
《Photoshop图层调整深度剖析》目录—导读
查看>>
《Wireshark网络分析就这么简单》—Excel文件的保存过程
查看>>
《高度安全环境下的高级渗透测试》—第1章1.4节探索BackTrack
查看>>
《Origin 9.0科技绘图与数据分析超级学习手册》一2.5 本章小结
查看>>
深度解析 API 监控那些事儿
查看>>
互联网企业安全高级指南3.7.3 因地制宜的SDL实践
查看>>
centos7.0体验与之前版本的不同
查看>>
《Docker生产环境实践指南》——1.2 从开发环境到生产环境
查看>>
Java NIO系列教程(五) 通道之间的数据传输
查看>>
open-falcon安装使用监控树莓派
查看>>
【基础篇】零碎时间整理JS
查看>>
理解 Android Battery 信息
查看>>
js红宝书总结-正则表达式
查看>>
Python2.7爬取acg178全站(大雾)
查看>>
iview 使用render渲染InputNumber,并格式化数字
查看>>
使用swoole改造laravel应用
查看>>