NHibernate version: 3.3.2.
いくつかの操作を含む NHibernate トランザクションがあります。トランザクションの中間ステップの 1 つとして、Session.Save を介して自動インクリメント PK を使用して新しいエンティティ インスタンスを挿入しようとします。
場合によっては、違反した外部キー値が原因で挿入エラーが発生することがあります。ログを作成して無視するために例外をキャッチします。挿入が行われていないと仮定して、次の手順を実行します。これは機能要件であり、変更できません。パフォーマンス要件によると、挿入する前に値を検証することも許容できる解決策ではありません。
私の問題: 非永続エンティティが NH セッション キャッシュに追加されましたが、ID が空です。したがって、後で他のNH操作を実行すると、この例外が発生します。
NHibernate.AssertionFailure: null id in MyApp.MyPackage.MyClass entry (don't flush the Session after an exception occurs)
私の質問: この厄介な「ゾンビ」エンティティをセッションから外して、すべてのステップの最後にトランザクションを正常にコミットするにはどうすればよいですか?
Id が空であるため、削除できません。
私はそれを試してみましたが、次の例外が発生しました:
System.InvalidOperationException: cannot generate an EntityKey when id is null
Clear()
トランザクションの途中であり、前後の手順を保持する必要があるため、現在のセッションもできません。
私が受け取った元の例外はやや混乱を招き、実際の問題が発生した場所とは別の場所でスローされました。このリンクは、何が起こっているのかを理解するための情報を私に与えてくれました: NHibernate - null id in entry (例外が発生した後にセッションをフラッシュしないでください)