此文由于当时不知道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方法的一些问题的更多相关文章

  1. 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存

    一.准备工作 [1]根据操作系统(位数)选择下载相应版本的MemCache, MemCache的下载和安装,参看: http://www.cnblogs.com/easy5weikai/p/37606 ...

  2. 01-08-03【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之缓存管理

    http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 管理NHibernate二级缓存 NHibernate二级缓存由ISessionF ...

  3. 01-04-02【Nhibernate (版本3.3.1.4000) 出入江湖】HQL查询

    public IList<Customer> GetAllHql() { IList<Customer> result = null; ISession session = _ ...

  4. 01-07-01【Nhibernate (版本3.3.1.4000) 出入江湖】并发控制

    Nhibernate 并发控制 [1]悲观并发控制 正在使用数据的操作,加上锁,使用完后解锁释放资源. 使用场景:数据竞争激烈,锁的成本低于回滚事务的成本 缺点:阻塞,可能死锁 [2]乐观并发控制: ...

  5. 01-03-03【Nhibernate (版本3.3.1.4000) 出入江湖】cascade的测试

    相关文章: http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html注意上面是hibernate,不是Nhibernate,这解释是 ...

  6. 01-03-01【Nhibernate (版本3.3.1.4000) 出入江湖】id标签的unsaved-value属性

    父表 <class name="Model.Customer, Model" discriminator-value="0"> <!--uns ...

  7. 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存

    http://www.cnblogs.com/lyj/archive/2008/11/28/1343418.html 可以在映射文件中定义命名查询,<query>元素提供了很多属性,可以用 ...

  8. 01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider

    第一步骤:hibernate.cfg.xml文件补上如下配置: <?xml version="1.0" encoding="utf-8"?> < ...

  9. 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的一级缓存

    缓存的范围? 1.事务范围 事务范围的缓存只能被当前事务访问,每个事务都有各自的缓存,缓存内的数据通常采用相互关联的对象形式.缓存的生命周期依赖于事务的生命周期,只有当事务结束时,缓存的生命周期才会结 ...

随机推荐

  1. UI1_UISlider与UISegment

    // // ViewController.m // UI1_UISlider与UISegment // // Created by zhangxueming on 15/7/7. // Copyrig ...

  2. 2016.10.30 济南学习 Day2 下午 T1

    他 [问题描述] 一张长度为N的纸带,我们可以从左至右编号为0 − N(纸带最左端标号为 0).现在有M次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带 的长度是多少. [输入格式] 第一行 ...

  3. AOJ 2200 Mr. Rito Post Office

    Mr. Rito Post Office Time Limit : 8 sec, Memory Limit : 65536 KB Problem D: Mr. Rito Post Office あなた ...

  4. 使用 Time Machine 恢复 .ssh等隐藏文件夹

    重装MAC系统后,要恢复.ssh等文件夹内容,而其在“Finder”中又是默认隐藏的,这时我们可以先在“Finder”中使用“前往文件夹功能…”进入指定文件夹,然后再进入“Time Machine”进 ...

  5. zedboard 中SDK 修改串口设置(波特率。。。。)

    其实在zedboard   SDK中不用初始化串口的也就是platform()可以不写 ,初始化在EDK导入SDK中就写好了  具体看bsp文件夹下面的汇编.但是如果我们想要在SDK中改变串口设置的话 ...

  6. 如何将Log4Net 日志保存到mongodb数据库之实践

    log4net的大名早有耳闻,一直没真正用过,这次开发APP项目准备在服务端使用log4net. 日志的数据量较大,频繁的写数据库容易影响系统整体性能,所以独立将日志写到mongodb数据库是不错的选 ...

  7. JavaScript 中的 replace 方法

    定义和用法 replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串. stringObject.replace(regexp/substr,replaceme ...

  8. Mysql支持中文全文检索的插件mysqlcft-应用中的问题

    MySQL目前版本的全文检索没有对中文很好的支持,但可以通过安装mysqlcft插件来实现,具体的安装使用方法:http://blog.s135.com/post/356/ mysqlcft的官方网站 ...

  9. How to force to Fullscreen Form

    Is it possibile by code resize a form to fullscreen? (like button Maximize) ? // VAR Changed on 10 J ...

  10. Freemarker例子

    1.引入架包 2.写ftl文件 3.代码 hello.ftl 你好啊,${hello},今天你的精神不错! if else 语句测试 <#if num gt 18><#-- 不使用 ...