linq to sql submitchanges rollback

时间:2013-05-07 13:09:12

标签: linq-to-sql asp.net-mvc-4 .net-4.5 rollback

有没有办法在db.submitchanges之后回滚而不需要事务?

为日志记录运行特殊服务将是一种耻辱。是否可以选择回滚而不使用该特殊服务?

提前感谢!

编辑:

我真正想要的是:我希望彼此之后进行2次数据库交互。

让我们说,我想在数据库表'Slots'中添加一些东西。提交之后,我可以收到由自动增量创建的ID。

该Id,我想用于在数据库中插入新日志。但是当插入日志失败时,我也希望在'Slots'中回滚动作..

这可能与我相信的交易有关,但似乎我不能在没有错误的情况下做到这一点。即使所有服务器都设置为允许它们并且防火墙已关闭..

2 个答案:

答案 0 :(得分:0)

没有

db.SubmitChanges()正在打开一个自己的交易,所以避免它不是一个选择。

不确定您对登录服务的意思,我想您的意思是您使用数据库进行日志记录,并且您使用相同的datacontext将日志写入数据库和业务数据,因此可能会发生您的业务数据失败(因此回滚事务)以及您的日志记录都已回滚。

最简单的解决方案是使用speparate datacontext进行日志记录。

<强>更新 在您的情况下不需要多个SubmitChanges,因为您不需要ID,您可以将实体添加到日志中。看看这里 How do I get Id of a record without submitting and re-querying?

由于你只能在SubmitChanges上,它将全部在一个交易中,它将完全按照你想要的那样做

答案 1 :(得分:-1)

您应该同时插入插槽和日志。

我不知道你的数据模型是如何构建的,而是简化的。

Log myLog = new Log();
Slot mySlot = new Slot();
...
...

DataContext db = new DataContext();

db.Slots.InsertOnSubmit(mySlot);

myLog.Slot = mySlot;
myLog.... = ....;

db.Logs.InsertOnSubmit(myLog);

db.SubmitChanges();