nhibernate的关系
来源:互联网 发布:淘宝客服一般几点下班 编辑:程序博客网 时间:2024/06/05 19:53
用nhibernate,觉得比较难把握的是其中表间的关系。
我用的是Fluently Nhibernate,直接用代码,而不是XML来书写代码与数据表的映射。其中表间关系有3种:
1、References(多对一)
2、HasMany(一对多)
3、HasOne(一对一)
1、References(多对一)
用于从表映射主表。常与主表映射从表的HasMany一起使用,可在同一事务中,让主表的ID和从表关联主表的ID一起生成。
比如说,主表的ID是个自增的字段,或者应用序列号(sequence)的字段。然后从表有个相应的字段关联了主表的ID。很明显,要先获得这个主表ID的值,从表这个关联ID才能赋值。如果是分步骤、分开事务的话,好像太琐碎了点。现在可以这样:
/*实体类*/public class Master{//主表 public virtual int ID{ get; set; } public virtual IList<Slave> Slaves { get; set; }}public class Slave{//从表 public virtual int ID { get; set; } public virtual int MasterID { get; set; } public virtual Master Master { get; set; }} /*映射*/public class MasterMap : ClassMap<Master>{//主表 public MasterMap() { Table("Master"); Id(s => s.ID).GeneratedBy.Sequence("SEQ_Master"); HasMany<Slave>(s => s.Slaves) .KeyColumn("MasterID") //指的是关联表的关联字段(自动用本表的主键字去关联对方) .Cascade.All() .LazyLoad(); }}public class SlaveMap : ClassMap<Slave>{//从表 public SlaveMap() { Table("Slave"); Id(s => s.ID).GeneratedBy.Sequence("SEQ_Slave"); Map(s => s.MasterID); References<Master>(s => s.Master).Not.LazyLoad().Column("MasterID");//本表的字段,关联主表的关键字 }}/*数据库操作Insert*/Master master = new Master();IList<Slave> lisSlave = new List<Slave>(){ new Slave(){ Master = master},//你中有我 new Slave(){ Master = master}, new Slave(){ Master = master}};master.Slaves = lisSlave;//我中有你masterService.Add(master);//插入到数据库
这样子之后,从表里的字段MasterID都已自动赋上了正确的值。不必先插入主表记录,获得其ID,然后再手动赋给从表对象这么麻烦。
PropertyRef
在关系References 和 HasMany里都有这个属性。注意是实体类里的属性名,而不是字段名。
property-ref:指定关联类的一个属性,这个属性将会和本外键相对应。如果没有指定,会使用对方关联类的主键(可选).property-ref属性只应该用来对付老旧的数据库系统,可能出现外键指向对方关联表的是个非主键字段(但是应该是一个惟一关键字)的情况。这是一种十分丑陋的关系模型。比如说,假设Product类有一个惟一的序列号,它并不是主键;
2、HasMany(一对多)
参考1
3、HasOne(一对一)
没啥心得
0 0
- nhibernate的关系
- nhibernate的一对多关系
- Nhibernate 单独表的继承关系
- Ado.net 与NHibernate的关系
- nhibernate 一对多的配置关系
- NHibernate映射关系
- Nhibernate一对多关系
- NHibernate映射关系表(实体映射文件字段的属性对应的NHibernate类型)
- NHibernate VS .NET VS DbType 的类型映射关系
- NHibernate one-to-one 关系的几点说明
- 用NHibernate处理带属性的多对多关系
- Nhibernate one-to-one 关系
- 从java中的hibernate看Ado.net 与NHibernate的关系
- NHibernate one-to-one 关系时 正确的xml写法和curd写法
- 自己对NHibernate一对多,多对一关系映射的一些心得
- NHibernate一对多,多对一关系映射的一些心得 .
- 关于Fluent NHibernate一对一关联关系使用session.Refresh的问题
- NHibernate中实体类、Mapping配置文件与数据库表之间的关系
- 杭电1003
- spark rdd详解二(transformation与action操作)
- 屏蔽网易博客碍眼的注册窗口
- pip-pop源码阅读笔记
- Android Studio遇到的问题
- nhibernate的关系
- Queue Reconstruction by Height
- codevs 3290 noip 2013 Day2 T3华容道
- ajax异步刷新上传文件
- UOJ #35. 后缀排序(后缀数组模板题)
- c++初学之面向对象
- 453. Minimum Moves to Equal Array Elements
- 《APUE》笔记-第九章-进程关系
- curl工具与常见命令