【问题标题】:linq to sql submitchanges rollbacklinq to sql submitchanges 回滚
【发布时间】:2013-05-01 11:01:16
【问题描述】:

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

不得不为日志运行专门的服务将是一种耻辱。是否有替代回滚而不使用该特殊服务的方法?

提前致谢!

编辑:

我真正想要的:我有 2 个数据库交互我想紧接着做。

假设,我想在数据库表 'Slots' 中添加一些内容。提交后就可以收到自增创建的Id了。

那个Id,我想用来在数据库中插入一个新的日志。但是当插入日志失败时,我也想回滚“插槽”中的操作..

我相信交易可以做到这一点,但似乎我无法做到这一点而不会出错。即使所有服务器都设置为允许它们并且防火墙已关闭..

【问题讨论】:

  • 你说的是什么特殊服务?日志记录呢?我不清楚问题是什么。

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


【解决方案1】:

没有。

db.SubmitChanges() 自己打开一个事务,所以避免它不是一个选项。

不确定您对登录服务的含义,我猜您的意思是您使用数据库进行日志记录,并且您使用相同的数据上下文将日志写入数据库和业务数据,因此您的业务数据可能会发生失败(因此回滚事务)并且您的日志记录也被回滚。

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

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

而且由于您只能在 SubmitChanges 上拥有,所有这些都将在一个事务中完成,并且完全符合您的要求

【讨论】:

  • 已经在另一个问题中回答了这个问题 - 我用链接更新了我的答案
【解决方案2】:

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

我不知道您的数据模型是如何构建的,但已简化。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多