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(); } } }
如果不添加标红语句,事务期间抛出异常,数据库的数据仍会修改
本文深入探讨了Nhibernate缓存机制对事务的影响,特别是在更新操作中,即使事务未提交,数据库也可能被意外更新。通过一个具体的代码示例,解释了如何在事务中正确使用缓存,确保数据的一致性和事务的原子性。
了&spm=1001.2101.3001.5002&articleId=101289396&d=1&t=3&u=aa51abb3eeba4c119716e86b335a986b)
1189

被折叠的 条评论
为什么被折叠?



