此文由于当时不知道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方法

最新文章

  1. 【转】Caffe初试(五)视觉层及参数
  2. 点击其它地方DIV隐藏
  3. (十)装饰器模式详解(与IO不解的情缘)
  4. 无法加载协定为“ServiceReference1.xxxxx”的终结点配置部分,因为找到了该协定的多个终结点配置。请按名称指示首选的终结点配置部分
  5. spring aop中的propagation的7种配置的意思
  6. Office 365 Certificate Exam Resources
  7. php中数组自定义排序
  8. 转:Android 测试 Appium、Robotium、monkey等框架或者工具对比
  9. Redis util
  10. 为RecyclerView的item之间设置相同的间距
  11. Vulkan Tutorial 24 Descriptor pool and sets
  12. CSS——元素分类
  13. JUnit介绍(转)
  14. 浅析 java ArrayList
  15. R语言安装xlsx包,读入excel表格
  16. EF db first 获取表名称
  17. flare-spork: 自己维护的Pig on Spark项目
  18. SIP协议流程
  19. Extjs Vbox布局方式,以及align种类,flex,pack属性含义简介
  20. 【取对数】【哈希】Petrozavodsk Winter Training Camp 2018 Day 1: Jagiellonian U Contest, Tuesday, January 30, 2018 Problem J. Bobby Tables

热门文章

  1. 20141110--SQL视图
  2. javascript构造函数小记
  3. qt QLabel 显示网络图片
  4. Windows Phone 7 ListBox 列表项渐显加载动画学习笔记
  5. 数字图象处理MATLAB学习
  6. jQuery的toggle()的自动触发真烦人
  7. Android开发之计算器(一)界面设计之activity_main布局文件
  8. 【原】去掉UltraGrid第三方控件中的Drag a column header here to group by that column
  9. svn迁移
  10. Jquery显示和隐藏的4种简单方法