2013-05-07 86 views
0

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

这将是一个耻辱,必须运行一个专门的登录服务。有没有其他方法可以回滚而不使用该特殊服务?

在此先感谢!

编辑:

我真的想什么:我有2间数据库的交互我想以后对方做对。

比方说,我想添加一些东西在数据库表'插槽'。提交后,我可以收到由自动增量创建的Id。

那个ID,我想用来在数据库中插入一个新的日志。但是当插入到日志失败时,我想回滚'插槽'中的动作..

这是可能的交易,我相信,但似乎我不能够做到这一点没有得到错误。即使所有服务器都设置为允许他们和防火墙是关闭..

+0

你在说什么特别的服务?记录怎么样?我不清楚问题是什么。 – usr 2013-05-07 13:34:02

回答

0

db.SubmitChanges()被打开交易itsself所以避免了它是不是一种选择。

不知道你对于loggin服务意味着什么,我猜你的意思是你使用数据库进行日志记录,并且你正在使用相同的datacontext将日志写入数据库和业务数据,以至于可能发生你的业务数据失败(如此回滚事务)并且您的日志记录也会回滚。

最简单的解决方案是使用专门的数据上下文进行日志记录。

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

而且因为你只能有对的SubmitChanges,它都将在一个事务中,它会做你想要

+0

我编辑了一些原始问题的更多信息... – user1122844 2013-05-10 12:33:25

+0

已回答,已在另一个问题 - 我用链接更新了我的答案 – Pleun 2013-05-10 13:44:40

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