EF6を使用すると、次のように使用できる新しいトランザクションがあります。
using (var context = new PostEntityContainer())
{
using (var dbcxtransaction = context.Database.BeginTransaction())
{
try
{
PostInformation NewPost = new PostInformation()
{
PostId = 101,
Content = "This is my first Post related to Entity Model",
Title = "Transaction in EF 6 beta"
};
context.Post_Details.Add(NewPost);
context.SaveChanges();
PostAdditionalInformation PostInformation = new PostAdditionalInformation()
{
PostId = (101),
PostName = "Working With Transaction in Entity Model 6 Beta Version"
};
context.PostAddtional_Details.Add(PostInformation);
context.SaveChanges();
dbcxtransaction.Commit();
}
catch
{
dbcxtransaction.Rollback();
}
}
}
物事が横向きになったときに実際にロールバックが必要ですか?コミットの説明に「基になるストアトランザクションをコミットする」と書かれているので、興味があります。
ロールバックの説明には、「基になるストアトランザクションをロールバックする」と記載されています。
Commitが呼び出されない場合、以前に実行されたコマンドは保存されないように見えるので、これは私に興味をそそられます(これは私には論理的に思えます)。しかし、その場合、ロールバック関数を呼び出す理由は何でしょうか。EF5では、論理的に思えるロールバック機能を持たない(Completeのみ)TransactionScopeを使用しました。MS DTCの理由により、TransactionScopeを使用できなくなりましたが、上記の例のようにtry catchを使用することもできません(つまり、コミットのみが必要です)。