我想同时转写一些表。如果一个不成功,必须全部回滚。
像这样的东西:
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();
抛出异常。例外是:
{System.InvalidOperationException: Connection must be valid and open to rollback transaction
真正有趣的是,表格截断是成功的。什么?提交是抛出异常。它可以成功吗?我无法理解。
请告诉我发生了什么事。如果你给我一个解决方案,那就更好了。