NHibernet 事务 修改操作,事务没提交,数据库数据却同步(修改)了

Nhibernet 缓存

由于查询出来的数据和缓存关联,更新之后就算事务没执行提交操作,数据库依旧会更新,解决方法, 清空缓存,实例不和缓存关联,如下面标红代码

public bool UpdateTrainPlanAndPro(TrainPlan trainPlan,List<Pro> pros)
        {
            ISession ss = NHibernateHelper.FrameworkDataProvider.Instance.GetSession();
            ITransaction trans = null;
            using (trans = ss.BeginTransaction())
            {
                try
                {
                    ss.Update(trainPlan);
                    var proList = Session.CreateCriteria<Pro>().Add(Expression.Eq("TId", trainPlan.Id)).List<Pro>();
                    Session.Clear();
                    foreach (var item in proList)
                    {
                        item.StudyHours = trainPlan.TrainHours;
                        item.WorkTypeId = trainPlan.WorkId;
                        ss.Update(item);
                    }
                    trans.Commit();
                    return true;
                }
                catch (Exception e)
                {
                    trans.Rollback();
                    return false;
                }
                finally
                {
                    trans.Dispose();
                }
            }
        }

如果不添加标红语句,事务期间抛出异常,数据库的数据仍会修改

原文地址:https://www.cnblogs.com/xiaonangua/p/11576605.html

时间: 2024-10-15 02:13:36

NHibernet 事务 修改操作,事务没提交,数据库数据却同步(修改)了的相关文章

数据库数据的批量修改操作

如果有大量不同数据要进行修改可以执行一下SQL  (此为Sql Server) 1.首先将要修改的数据导入数据库然后进行如下操作 // 2.删除要修改数据中的为空 和 为 null 的数据   注:数据为空或者 为null 数据不变(根据实际情况不一定要执行这句sql) -- delete  a FROM [DMSDB].[dbo].[广州本部交易处修改$] a       //  [DMSDB]:数据库名称,  广州本部交易处修改:导入数据库的表 where a.[COUNTER_CNT]is

【c#】ADO操作Access的mdb数据库只能读不能修改的解决方法

在使用ACCESS数据库时连接字符串如 string [email protected]"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\Access操作\简易ACCESS数据库\简易ACCESS数据库\学生表.mdb"; 红色标注的部分是要使用绝对路径不然对access不能插入不能修改 另外 执行command字符串时先在t-sql中调试关键字,如表格名称.字段名尽量用[ ]括起来 原文地址:https://www.cnblogs.co

MySQL数据库数据存放位置修改

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一.MySQL 是开源的,所以你不需要支付额外的费用.MySQL 对 PHP 有很好的支持,PHP是目前最流行的 Web 开发语言.大部分的PHP开发者都会去学习MySQL.MySQL是可以

sql 数据库数据 批量判断修改

A表B表相关联  更新B表中的VisitWeek字段值 CCD_PartnerVisit 此为B表 Dell_FiscalWeek  此为A表 UPDATE CCD_PartnerVisit SET VisitWeek = 'FY'+convert(varchar(50),Dell_FiscalWeek.Fiscal_Year)+'Q'+convert(varchar(50),Dell_FiscalWeek.Fiscal_Quarter)+'W'+convert(varchar(50),Dell

步步为营99-不同数据库数据实时同步

说明: 项目主数据中间表同步项目主数据现在做了3张新的中间表,我们的任务就是做个windows服务 从那3张中间表拉取部分字段数据插入我们老的中间表 解决方案: 先从代码里连接中间表数据库,利用c# sqlserver类里的批量插入方法统一插入到本地的临时表,然后在存储过程里把临时表数据处理到目的表. 1: 先写一个存储过程:实现临时表[dbo].[Temp_MDM_Corporate]和中间表[dbo].[Z_MDM_Corporate]比对. 如果中间表中的数据和临时表一致,不进行操作; 如

[数据库事务与锁]详解二: 数据库的读现象浅析

注明: 本文转载自http://www.hollischuang.com/archives/900 “读现象”是多个事务并发执行时,在读取数据方面可能碰到的状况.先了解它们有助于理解各隔离级别的含义.其中包括脏读.不可重复读和幻读. 脏读 脏读又称无效数据的读出,是指在数据库访问中,事务T1将某一值修改,然后事务T2读取该值,此后T1因为某种原因撤销对该值的修改,这就导致了T2所读取到的数据是无效的. 脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交(commit)到

Spring的编程式事务和声明式事务

事务管理对于企业应用来说是至关重要的,当出现异常情况时,它也可以保证数据的一致性. Spring事务管理的两种方式 spring支持编程式事务管理和声明式事务管理两种方式. 编程式事务使用TransactionTemplate或者直接使用底层的PlatformTransactionManager.对于编程式事务管理,spring推荐使用TransactionTemplate. 声明式事务是建立在AOP之上的.其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法

数据库事务隔离级别--读未提交,读已提交,重复读,序列化

参考原文:https://my.oschina.net/bigdataer/blog/1976010 上一篇文章讲述了:数据库主从复制,那么新的问题数据库读写分离对事物是否有影响? 1. 名词 读未提交read-uncommited 读已提交read-commited 重复读repeatable-->可能产生主从数据不一致问题 串行化serializable-->特殊场景-秒杀使用,一般不用 数据库事务的隔离级别有4个,由低到高依次为Read uncommitted.Read committe

C#代码启用事务锁Transaction进行一系列提交回滚操作

一.前言 因为很多人一般进行一系列相关数据库操作都是在存储过程里面,而且在存储过程用锁的写法也是很简单的,在这篇文章主要介绍一下C#后台代码用锁进行一系列事务操作,我建立一个简单的winform程序,然后做一个事务:修改指定ID的用户信息,然后新增一名用户信息,操作成功就提交事务,程序异常和数据库执行不成功都必须回滚事务! 二.存储过程的事务 写得比较简单,我想大家都知道怎么使用了,不懂的可以问我. 三.C#代码的事务 1.封装一个事务类,里面有事务的创建.提交事务.回滚事务和销毁事务的方法 p