この種の質問が炎上戦争につながる可能性があることはわかっています。個人的に私は nHibernate の大ファンであり、完璧な ORM はないことを認識しています。これに私が知らない正当な理由があるのか 、それとも変更すると既存のコードが破損するために存在する設計上の欠陥なのかを判断しようとしています.
私が説明している動作は次のとおりです。
nHibernate はネストされたトランザクションをサポートしていないため、既存のISession
名前があると仮定すると、次のコードは 3 行目で例外をスローするべきではありません。session
ITransaction tx = null;
tx = session.BeginTransaction();
tx = session.BeginTransaction();
現在のスレッドで開いているトランザクションが他にないと仮定すると、最初の呼び出しでBeginTransaction()
実際にトランザクションが開始されます。ただし、2 番目は既存のトランザクションを返すだけです。ネストされたトランザクションがサポートされているような印象を与えます。これは悪い命名法ですか?
2 つのメソッドを作成する方が理にかなっていますか? 開発者が気にしない状況で既存のトランザクションを取得するか、存在しない場合は作成するためのものと、特に新しいトランザクションを作成し、それができない場合に失敗する別の方法はありますか?
この質問は nHibernate に関するものですが、おそらくこれは Hibernate にも当てはまります。