いくつかのテーブルを同時に変換したいと思います。1つが成功しない場合は、すべてロールバックする必要があります。
そんな感じ:
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
本当に面白いのは、テーブルの切り捨ては成功です。何?コミットは例外をスローします。そしてそれは成功することができますか?理解できません。
何が起こっているのか教えてください。あなたが私に解決策を与えれば、それはさらに良いです。