Linq to sql linq到sql提交更改回滚

Linq to sql linq到sql提交更改回滚,linq-to-sql,asp.net-mvc-4,.net-4.5,rollback,Linq To Sql,Asp.net Mvc 4,.net 4.5,Rollback,是否有一种方法可以在db.submitchanges后回滚,而无需取消事务 如果要运行一个专门用于日志记录的服务,那将是一种耻辱。是否有其他方法可以回滚,而不使用该特殊服务 提前谢谢 编辑: 我真正想要的是:我有两个数据库交互,我想在彼此之后立即进行 比方说,我想在数据库表“Slots”中添加一些内容。提交此文件后,我可以接收自动增量创建的Id 我要使用该Id在数据库中插入新日志。但是当插入日志失败时,我也想回滚“插槽”中的操作 这在我相信的事务中是可能的,但我似乎无法做到这一点而不出错。即使所

是否有一种方法可以在db.submitchanges后回滚,而无需取消事务

如果要运行一个专门用于日志记录的服务,那将是一种耻辱。是否有其他方法可以回滚,而不使用该特殊服务

提前谢谢

编辑:

我真正想要的是:我有两个数据库交互,我想在彼此之后立即进行

比方说,我想在数据库表“Slots”中添加一些内容。提交此文件后,我可以接收自动增量创建的Id

我要使用该Id在数据库中插入新日志。但是当插入日志失败时,我也想回滚“插槽”中的操作

这在我相信的事务中是可能的,但我似乎无法做到这一点而不出错。即使所有服务器都设置为允许,并且防火墙已关闭。

db.SubmitChanges()
本身正在打开一个事务,因此避免它不是一个选项

我不确定使用loggin服务意味着什么,我猜您的意思是使用数据库进行日志记录,并且使用相同的datacontext将日志写入数据库和业务数据,以便发生业务数据失败(因此回滚事务)以及日志记录被回滚的情况

最简单的解决方案是在日志记录中使用单独的datacontext

更新 在您的案例中不需要多次提交更改,因为您不需要ID,您可以将实体添加到日志中。看看这里


而且,由于您只能进行提交更改,因此所有更改都将在一个事务中进行,并且它将完全按照您的要求执行

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

我不知道你的数据模型是如何建立起来的,只是简化了

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();

你在说什么特别服务?那伐木呢?我不清楚这个问题是什么。我已经在另一个问题中回答了这个问题-我用一个链接更新了我的答案