01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题
2014-05-23 10:39
369 查看
此文由于当时不知道NHibernate的Sava方法不是更新操作,不知道Save就是Add,造成如下荒唐的求证过程,但结论是对的
,可报废此文,特此声明。
NHibernate--Save方法:
CustomerService.cs
View Code
添加实体对象后,修改值,调用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"
从表实体对象没有会被当做新的实体重复添加
这说明我的这一文章:
还是那句话话:宁可信其有,不可信其无。
结论:
搞了这多测试,session的Save方法TMD的压根就是添加一个新实体。不包含任何更新,就知道创建新的。
还有就是你TMD新增就新增,还把原来的实体的子表对象一起联级夺走,你TMD的到底要干什么。
真不知道Save有个屁用。我草!!!!!!!!!
建议调用session的SaveOrUpadate或Update方法
,可报废此文,特此声明。
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(); } }
View Code
添加实体对象后,修改值,调用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-1【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作--cascade 级联相关
- 01-03-01【Nhibernate (版本3.3.1.4000) 出入江湖】id标签的unsaved-value属性
- 01-05-01-1【Nhibernate (版本3.3.1.4000) 出入江湖】延迟加载及其class和集合(set、bag等)的Lazy属性配置组合对Get和Load方法的影响
- 01-08-03【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之缓存管理
- 01-03-03【Nhibernate (版本3.3.1.4000) 出入江湖】cascade的测试
- 01-08-02【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider
- 01-08-03【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之查询缓存
- 01-04-02【Nhibernate (版本3.3.1.4000) 出入江湖】HQL查询
- 01-04-03【Nhibernate (版本3.3.1.4000) 出入江湖】Criteria API关联查询
- 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的一级缓存
- 01-01-01【Nhibernate (版本3.3.1.4000) 出入江湖】配置文件
- 01-08-04【Nhibernate (版本3.3.1.4000) 出入江湖】二级缓存:NHibernate自带的HashtableProvider之命名缓存
- 01-07-01【Nhibernate (版本3.3.1.4000) 出入江湖】并发控制
- 01-08-05【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate二级缓存:第三方MemCache缓存
- 01-06-01【Nhibernate (版本3.3.1.4000) 出入江湖】事务
- 01-04-01【Nhibernate (版本3.3.1.4000) 出入江湖】原生的SQL查询
- 01-05-01-2【Nhibernate (版本3.3.1.4000) 出入江湖】立即加载实现--NHibernateUtil.Initialize()和添加fetch关键字的HQL查询
- 01-08-01【Nhibernate (版本3.3.1.4000) 出入江湖】NHibernate中的三种状态
- c#操作Excel 一些问题 字符变为null解决方法
- Android学习笔记03:学习过程中碰到的一些问题及解决方法