私は、NHibernate のかなり一般的な使用例だと思うものを持っています。エンティティを作成し、ISession.Save() に続いて Transaction.Commit() を使用して保存しようとしました。この時点で、一意/主キー制約などの違反が例外として発生することを期待しています。ただし、私が見ているのは単なる GenericADOException です。これは、真の DB 障害と、一意性を維持するためにエンティティに別の名前を選択するようユーザーに求めるようなものとを区別するのに役立ちません。
現時点では、制約に違反しないようにするために、最初にクエリを実行するという醜い回避策を実装しました。これは発生を待っている単なる競合状態であり、ユーザーに「おっと、DB が何かおかしなことをしました。これをもう一度試してみてください」と表示されたくありません。メッセージの種類。
これを修正するエレガントな方法はありますか?