• 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方法

  • 相关阅读:
    XSS 跨站脚本攻击之构造剖析(一)
    PHP 一个表单多个提交按钮,处理不同的业务逻辑
    Ajax 学习之动态获取,返回服务器的值
    Ajax 学习之获取服务器的值
    Ajax 学习之创建XMLHttpRequest对象------Ajax的核心
    H5开发之Eclipes 编码乱码问题
    PHP 表单提交多行数据,显示多个submit
    PHP 输出表格单元格的数据之用表单的方式;
    PHP 读取逐条数据库记录,以及提交下拉菜单选项
    mysql多个TimeStamp设置(转)
  • 原文地址:https://www.cnblogs.com/easy5weikai/p/3747116.html
Copyright © 2020-2023  润新知