关于EF执行事务回滚的问题

loversoul2 2017-11-25 12:31:57
现有以下代码
using (var db = new DBEntities())
{
using (var tran = db.Database.BeginTransaction())
{
BusinessUser bu = new BusinessUser();
bu.CREATETIME = DateTime.Now;
bu.Id = Guid.NewGuid();
bu.SKey = "44444";
bu.UName = "第6条";
db.BusinessUser.Add(bu);

var id = "22DEE962-FCF6-4F21-965F-8DE91F7AE235";
db.Database.ExecuteSqlCommand("UPDATE BusinessUser SET uname='xiugai' WHERE Id=@p0", id);
var result = db.SaveChanges();

if (result == 0)
{
tran.Rollback();
}
else
{
tran.Commit();
}
}

}

现在想做一条这样的事务回滚,如果UPDATE失败(即更新行数为0)时,添加也不能成功。
请问这条事务怎么做,按这个写法没办法回滚,谢谢
...全文
566 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
圣殿骑士18 2017-11-25
  • 打赏
  • 举报
回复
引用 2 楼 loversoul2 的回复:
谢谢了,是可以
如果2楼的方法有用,savechange在前,那么如果savechange先失败呢?这是存在逻辑漏洞的
圣殿骑士18 2017-11-25
  • 打赏
  • 举报
回复
怎么还用判断result 返回值这么啰嗦的。 失败会抛出异常的呀,根据返回值判断已经过时了。
using (var db = new DBEntities())
{
	using (var tran = db.Database.BeginTransaction())
	{ 
		try
		{
			BusinessUser bu = new BusinessUser();
			bu.CREATETIME = DateTime.Now;
			bu.Id = Guid.NewGuid();
			bu.SKey = "44444";
			bu.UName = "第6条";
			db.BusinessUser.Add(bu);

			var id = "22DEE962-FCF6-4F21-965F-8DE91F7AE235";
			db.Database.ExecuteSqlCommand("UPDATE BusinessUser SET uname='xiugai' WHERE Id=@p0", id); 
			var  result = db.SaveChanges();

			tran.Commit();
		}
		catch(Exception)
		{
			tran.Rollback();
		}
	}

}
loversoul2 2017-11-25
  • 打赏
  • 举报
回复
谢谢了,是可以
笑容融化坚冰 2017-11-25
  • 打赏
  • 举报
回复
SaveChanges方法移到Add方法后面,result去接收execute方法的返回值

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧