NHibernate one-to-one 关系时 正确的xml写法和curd写法

本文介绍使用NHibernate框架进行一对一双向关联映射的方法,包括配置文件定义、保存、更新及删除操作中需要注意的问题。

parent.xml

 

<class name="parent" table="parent">

  <id name="Id" type="Int32" unsaved-value="null">
   <column name="id" length="4" sql-type="int" not-null="true" unique="true" />
   <generator class="identity" />
  </id>

  <one-to-one name="child" class="child" cascade="all" />

</class>

 

 

child.xml

 

<class name="child" table="child">
  <id name="Id" type="Int32" unsaved-value="null">
   <column name="id" length="4" sql-type="int" not-null="true" unique="true" />
      <generator class="foreign">
        <param name="property">parent</param>
      </generator>
  </id>

  <one-to-one name="parent" class="parent" constrained="true" />

</class>

 

 

------------------------------------------------------------------------------------------------------------------

Save 存储的时候:

parent p = new parent();

child c = new child();

 

c.parent = p;

//p.child = c; //如果加上这个赋值,nhibernate会生成针对child表的update语句,因为是新生成记录,所以会出现“Unexpected row count: 0; expected: 1”错误提示。

 

session.Save(c); //将在parent,child表中各自生成1条记录

//session.Save(p); //将在parent表中生成一条记录,child表中没有记录

 

-------------------------------------------------------------------------------------------------------------------

Update 更新记录的时候

parent p = session.Load(parentId);

p.child.xxx = "xx";

 

//p.child = new child(); //这种方式更新子类,将会出现“Unexpected row count: 0; expected: 1”错误提示。new 出来的child还处于transient临时状态,替换p.child则会出错。

 

session.SaveOrUpdate(p); //这将同时更新parent和child表中的数据。

 

--------------------------------------------------------------------------------------------------------------------

Delete 删除记录的时候

parent p = session.Load(parentId);

session.Delete(p); //这样将同时删除parent和child表中的数据

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值