01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题
此文由于当时不知道NHibernate的Sava方法不是更新操作,不知道Save就是Add,造成如下荒唐的求证过程,但结论是对的
,可报废此文,特此声明。
NHibernate--Save方法:
CustomerService.cs
public void Save(Customer customer)
{
ISession session = _sessionManager.GetSession();
ITransaction transaction = session.BeginTransaction(); try
{
session.Save(customer);
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
throw;
}
finally
{
session.Close();
}
}
添加实体对象后,修改值,调用save方法,修改后的实体对象被作为新的实体对象保存到数据库。所以,建议调用session的SaveOrUpadate或Update方法
如下图所示:

再次测试,从表实体对象是否也会被当做新的实体重复添加:

测试表明:
1.主表的修改后实体对象显示调用Save会被当新的实体对象添加到数据库。
2.从表的配置 unsaved-value="0":Nhibernate自动取从表实体的Id与unsaved-value比较,自动决定调用Save还是Update。
从表实体对象没有会被当做新的实体重复添加
3.有意思的是:从表的实体对象关联的主表实体发生了改变。原来关联的CustomerId=77,
修改有再次调用主表对象customer(原来CustomerId=77,修改后变成CustomerId=78,)显示调用Save方法,从表的实体对象关联的CustomerId=78,
第三次测试,注释了表的配置 unsaved-value="0",从表实体对象是否也会被当做新的实体重复添加
如下图测试:

经测试表明:
注释了表的配置 unsaved-value="0"
从表实体对象没有会被当做新的实体重复添加
这说明我的这一文章:
01-03-01【Nhibernate出入江湖】id标签的unsaved-value属性
是多少有点骗人的成分,不过最好还是加上吧,可能存在版本的问题以及兼容旧版本(我的Nhibernate版本是NHibernate-3.3.3.CR1-bin)。
还是那句话话:宁可信其有,不可信其无。
结论:
搞了这多测试,session的Save方法TMD的压根就是添加一个新实体。不包含任何更新,就知道创建新的。
还有就是你TMD新增就新增,还把原来的实体的子表对象一起联级夺走,你TMD的到底要干什么。
真不知道Save有个屁用。我草!!!!!!!!!
建议调用session的SaveOrUpadate或Update方法
01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题的更多相关文章
- 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存
一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...
- 01-08-03【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之缓存管理
http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 管理NHibernate二级缓存 NHibernate二级缓存由ISessionF ...
- 01-04-02【Nhibernate (版本3.3.1.4000) 出入江湖】HQL查询
public IList<Customer> GetAllHql() { IList<Customer> result = null; ISession session = _ ...
- 01-07-01【Nhibernate (版本3.3.1.4000) 出入江湖】并发控制
Nhibernate 并发控制 [1]悲观并发控制 正在使用数据的操作,加上锁,使用完后解锁释放资源. 使用场景:数据竞争激烈,锁的成本低于回滚事务的成本 缺点:阻塞,可能死锁 [2]乐观并发控制: ...
- 01-03-03【Nhibernate (版本3.3.1.4000) 出入江湖】cascade的测试
相关文章: http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html注意上面是hibernate,不是Nhibernate,这解释是 ...
- 01-03-01【Nhibernate (版本3.3.1.4000) 出入江湖】id标签的unsaved-value属性
父表 <class name="Model.Customer, Model" discriminator-value="0"> <!--uns ...
- 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存
http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...
- 01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider
第一步骤:hibernate.cfg.xml文件补上如下配置: <?xml version="1.0" encoding="utf-8"?> < ...
- 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的一级缓存
缓存的范围? 1.事务范围 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结 ...
随机推荐
- 【学习笔记】【C语言】循环结构-while
1. 简单使用 while ( 条件 ) { 语句1; 语句2; .... } 如果条件成立,就会执行循环体中的语句(“循环体”就是while后面大括号{}中的内容).然后再次 ...
- 8款效果惊艳的HTML5 3D动画
1.HTML5 WebGL水面水波荡漾特效 之前已经向各位分享过一款很逼真的HTML5水波荡漾特效,效果还算不错.今天再向大家分享一款更加给力的HTML5水波动画,画面上是一个大水池,水池底部是一颗大 ...
- Linux 内核同步机制
本文将就自己对内核同步机制的一些简要理解,做出一份自己的总结文档. Linux内部,为了提供对共享资源的互斥访问,提供了一系列的方法,下面简要的一一介绍. Technorati 标签: ...
- 1103 POI2007 大都市meg
树链剖分水过,单点修改,树状数组即可. #include <cstdio> #include <cstring> #include <cstdlib> #inclu ...
- zedboard之GPIO驱动(从FPGA一直到LINUX应用)
1 EDK 大家知道我们在EDK中建立GPIO然后倒出到SDK中,在SDK中可以用C语言操作外设GPIO,但是这还是裸机程序,没有用到LINUX.本文将记录从FPGA EDK生成GPIO一直到导入S ...
- c# 取得ip地址和网关
/// <summary> /// 得到本机IP /// </summary> private string GetLocalIP() { //本机IP地址 string st ...
- 【Qt】Qt之启动外部程序【转】
简述 QProcess可以用来启动外部程序,并与它们交互. 要启动一个进程,通过调用start()来进行,参数包含程序的名称和命令行参数,参数作为一个QStringList的单个字符串. 另外,也可以 ...
- arguments.callee 调用函数自身用法----JSON.parse()和JSON.stringify()前端js数据转换json格式
arguments.callee 调用函数自身用法 arguments.callee 在哪一个函数中运行,它就代表哪个函数. 一般用在匿名函数中. 在匿名函数中有时会需要自己调用自己,但是由于是匿名函 ...
- 关于CSS中的PX值(像素)
场景: 人物:前端实习生「阿树」与 切图工程师「玉凤」事件:设计师出设计稿,前端实现页面 玉凤:树,设计稿发给你啦,差那么点像素,就叼死你┏(  ̄へ ̄)=☞阿树:~(>_<)~毛问题噶啦~ ...
- Android emulator warning----Emulator window was out of view and was recentred
最近在打开Android emulator时,总会提示“Emulator window was out of view and was recentred ”,然后无法打开模拟器,但是可以使用Win7 ...