Entity Framework 4とFirebirdデータベースでトランザクションスコープを使用する必要があります。私はFireBird Entity Frameworkプロバイダを使用しています。FirebirdとEntity Frameworkトランザクションロールバック
問題は、オブジェクトに対してSaveChangesが呼び出されると、transactionScope.Complete()が呼び出されたときではなく、データがデータベースに保存されるということです。これにより、使用(TransactionScope ...)ブロック内で例外が発生しても、データがロールバックされることはありません。
これはFireBird DBに問題があるようですが、私はMS SQL 2008と正確に同じコードをテストして、RollBackが正しく動作しています。
FireBirdでローリングバックを有効にするには何が必要ですか?
using (var context = new Model1Container())
{
bool success = false;
using (TransactionScope transactionScope = new TransactionScope())
{
PERSON person = new PERSON();
person.NAME = "test";
context.AddToPERSON(person);
context.SaveChanges(SaveOptions.DetectChangesBeforeSave);
success = true;
//transactionScope.Complete(); If this line is not hit, Transaction should Roll Back, but it does not.
}
if (success)
{
context.AcceptAllChanges();
}
}
接続文字列に自動コミットがありますか? – BennyM
EntityClient接続文字列にauto-commit = falseを設定する方法はありますか? – Zpock
エンティティクライアントの接続文字列のどこかに、普通の古い接続文字列があります。エンティティクライアントの接続文字列内の "connection string ="を探します。 – BennyM