• 01-03-02-2【Nhibernate (版本3.3.1.4000) 出入江湖】CRUP操作-Save方法的一些问题


    此文由于当时不知道NHibernate的Sava方法不是更新操作,不知道Save就是Add,造成如下荒唐的求证过程,但结论是对的

    ,可报废此文,特此声明。

    NHibernate--Save方法:   

    CustomerService.cs

     1         public void Save(Customer customer)
     2         {
     3             ISession session = _sessionManager.GetSession();
     4             ITransaction transaction = session.BeginTransaction();
     5 
     6             try
     7             {
     8                 session.Save(customer);
     9                 transaction.Commit();
    10             }
    11             catch (Exception)
    12             {
    13                 transaction.Rollback();
    14                 throw;
    15             }
    16             finally
    17             {
    18                 session.Close();
    19             }
    20         }
    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方法

  • 相关阅读:
    安装Oracle时出现环境变量Path的值大于1023的解决办法
    JavaScript通过元素id和name直接获取元素的方法
    [转载]T-SQL(Oracle)语句查询执行顺序
    [转载]T-SQL(MSSQL)语句查询执行顺序
    HTML5权威指南 17.其他API
    HTML5权威指南 16.拖放API与通知API
    HTML5权威指南 15.获取地理位置信息
    HTML5权威指南 14.使用Web Workers处理线程
    HTML5权威指南 13.扩展的XMLHttpRequest API
    HTML5权威指南 12.WebRTC通信
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/3747116.html
Copyright © 2020-2023  润新知