gpt4 book ai didi

c# - 如果 'SubmitChanges' 失败但需要其他提交,如何回滚 DBContext 中的数据更改?

转载 作者:行者123 更新时间:2023-12-02 12:28:59 24 4
gpt4 key购买 nike

在某些业务案例中,我的应用程序在交易内部出现错误。情况如下:

static void MyFunc(DBContext context)
{
context.MyObjects.InsertOnSubmit(new MyObj{Id=1});
// Id - is a primary key
context.MyObjects.InsertOnSubmit(new MyObj{Id=1});
// here I force system to fail
// by trying to add record with
// duplicated primary key value

context.SubmitChanges(); // causes an error (as expected)
}

static void main()
{
using (DBContext context = new DBContext())
{
try
{
using (TransactionScope scope = CreateTransactionScope())
{
MyFunc(context);

scope.Complete();
}
}
catch(Exception exc)
{
MyLog log = new MyLog{...valid object data... want to log error ... };
context.MyLogs.InsertOnSubmit(log);
context.SubmitChanges();
}
}
}

这里的问题是,尝试保存“log”对象会导致尝试将之前添加的对象也保存到“MyObject”表中!结果我无法保存日志记录...并且我的“main”函数抛出异常...

我该如何解决这个问题?欢迎任何想法。

(我使用的是 MS SQL 2005、Linq2Sql、.NET 3.5,也欢迎提出有关 .NET 4.0 的想法!)

附注我知道调用“scope.Rollback”可能是个好主意,但如果我离开“using (TransactionScope range ...)”而不调用“Complete”,那么“回滚应该自动应用...

P.P.S。我可以创建一个新的“DBContext”对象,但认为这是不合理的。

最佳答案

事务是一种对必须作为整体而不是部分执行的操作进行分组的工具。由于您的某些操作可以(并且在您的情况下必须)轻松地与其余操作分开,因此使用两个单独的事务似乎更合适。

关于c# - 如果 'SubmitChanges' 失败但需要其他提交,如何回滚 DBContext 中的数据更改?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5172328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com