TransactionScope类需要引用System.Transactions;

 

 

数据库环境及需求

现在假设有两个表如图:

 EF中关于TransactionScope的使用                                     EF中关于TransactionScope的使用

 

 

           表TA                                                                                  表TB 

 

 

现有数据:EF中关于TransactionScope的使用                                            EF中关于TransactionScope的使用

 

 

 

 

 

 现在的需求是:每往TA中插入一条数据,就更新TB的第一行,值为表TA的所有行的Age的平均值

 可以看到表TB的Remark长度仅仅为2,待会利用这个制造错误

 

 

 

当不使用TransactionScope时:

 using (EFTestEntities db = new EFTestEntities())
            {
                //数据库TA原有2行,此时添加第3行
                var aEntity = new TA
                {
                    Name = "a",
                    Age = 20
                };
                db.TA.Add(aEntity);

                var listTA = db.TA.ToList();//此时list只有2行,新添加的没有读取到
                int totalAge = 0;
                listTA.ForEach(p => totalAge += p.Age);

                //获取表TB的第一行,并修改AvgAge值
                var bEntity = db.TB.First();
                bEntity.AvgAge = totalAge / listTA.Count;
                bEntity.Remark = "bb";
                db.SaveChanges();
                //结果是Tb的值没有变化
            }  
View Code

相关文章: