gpt4 book ai didi

c# - 如何在 EntityFramework 5 中使用 Transaction?

转载 作者:可可西里 更新时间:2023-11-01 06:27:46 25 4
gpt4 key购买 nike

我想同时截断一些表。如果一个不成功,必须全部回滚。

类似的东西:

ctx.Database.ExecuteSqlCommand("truncate table tb_expensesall");
ctx.Database.ExecuteSqlCommand("truncate table tb_wholesale");
ctx.Database.ExecuteSqlCommand("truncate table tb_singlesale");
ctx.Database.ExecuteSqlCommand("truncate table tb_purchase");

但问题是,我不知道如何使用事务。

我试试这个:

using (gasstationEntities ctx = new gasstationEntities(Resources.CONS))
{
ctx.Database.Connection.Open();
DbTransaction tr = ctx.Database.Connection.BeginTransaction();

try
{
ctx.Database.ExecuteSqlCommand("truncate table tb_expensesall");
ctx.Database.ExecuteSqlCommand("truncate table tb_wholesale");
ctx.Database.ExecuteSqlCommand("truncate table tb_singlesale");
ctx.Database.ExecuteSqlCommand("truncate table tb_purchase");
//commit the transaction
tr.Commit();
new MessageWindow(this, Resources.GetString("Warn"), Resources.GetString("DeleteSuccess"));
}
catch (Exception ex)
{
//return
tr.Rollback();
}
//close
ctx.Database.Connection.Close();
}

这里的问题:tr.Commit();异常告诉我:

{System.InvalidOperationException: Connection must be valid and open to rollback transaction

并且 tr.Rollback(); 抛出异常。异常(exception)情况是:

{System.InvalidOperationException: Connection must be valid and open to rollback transaction

真正有趣的是,表截断成功了。什么?提交是抛出异常。它可以成功吗?我无法理解。

请告诉我发生了什么事。如果你给我一个解决方案,那就更好了。

最佳答案

添加对 System.Transactions 的引用,导入 using System.Transactions; 然后尝试通过以下方式封装您的代码

using (gasstationEntities ctx = new gasstationEntities(Resources.CONS))
{
using (var scope = new TransactionScope())
{
[... your code...]

scope.Complete();
}
}

如果发生异常,则不会调用 scope.Complete() 并自动回滚。

编辑: 我刚看到您的 MySql 标签。如果这不起作用,请查看 here !

关于c# - 如何在 EntityFramework 5 中使用 Transaction?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13863871/

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