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

本文深入探讨了Nhibernate缓存机制对事务的影响,特别是在更新操作中,即使事务未提交,数据库也可能被意外更新。通过一个具体的代码示例,解释了如何在事务中正确使用缓存,确保数据的一致性和事务的原子性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

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>();foreach (var item in proList)
                    {
                        item.StudyHours = trainPlan.TrainHours;
                        item.WorkTypeId = trainPlan.WorkId;
                        ss.Update(item);
                    }
            Session.Clear();  trans.Commit();
return true; } catch (Exception e) { trans.Rollback(); return false; } finally { trans.Dispose(); } } }

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

 

转载于:https://www.cnblogs.com/xiaonangua/p/11576605.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值