NHibernateのSaveOrUpdateとSave/Updateの違いは何ですか?なぜ、あなたは常にSaveOrUpdateを使用しませんでしたか?また、SaveOrUpdateCopyのポイントは何ですか?SaveOrUpdate対NHibernateでの保存
56
A
答えて
67
第9章は、私ができるよりも、この優れたすべてをカバー:
http://nhibernate.info/doc/nh/en/index.html
しかし、崖のノート:
Save()
は識別子せずに新しいオブジェクトを受け取り、セッションにそれを添付します。オブジェクトはINSERT
'となります。
Update()
は、識別子を持ちますがセッションには存在しない既存のオブジェクトを取り、それをセッションに接続します。オブジェクトはUPDATE
'となります。
SaveOrUpdate()
は、識別子を見て、上記で必要なものを決定します。
SaveOrUpdateCopy()
は、同じ識別子を持つ2つのオブジェクト(セッションに1つ、オブジェクトには1つ)があるという点で特別です。試してみると、セッションに含まれていないものがupdate
の場合、例外が正常にスローされます(セッションに同じ永続オブジェクトを表す2つのオブジェクトをアタッチしようとしています)。 SaveOrUpdateCopy()
は、非セッションオブジェクト状態をセッションオブジェクト状態にコピーする。
どのようにNHを使用するのか分かりませんが、多くの場合、必要なのはSave()
です。セッションは何を更新する必要があるかを知るために必要な作業をすべて実行しており、必要なものはすべてまたはCommit()
です。
関連する問題
- 1. NHibernate SaveOrUpdateエラー
- 2. NHibernateのリポジトリするsaveOrUpdateオブジェクトグラフ
- 3. NHibernateのSaveOrUpdateメソッドをオーバーライドしますか?
- 4. NHibernateはオブジェクトを1対1の関係で保存します
- 5. NHibernateで保存されていない1対多のリスト
- 6. 多対一idなしで保存されたNHibernateアロケーション
- 7. 違い保存とするsaveOrUpdateの方法冬眠
- 8. NHibernate 1対多数マッピングおよび保存
- 9. Nhibernateで未保存の値3.2
- 10. 流暢なnhibernateバッチ保存
- 11. nhibernateで保存するには?
- 12. NHibernate nullの代わりに0から多対1の列を保存する
- 13. Nhibernateマルチレベル階層の保存エラー?
- 14. NHibernateの保存エラーw/iデータベース
- 15. Fluent Nhibernate - データベースにオブジェクトを保存する
- 16. Nhibernate - 依存テーブルでオブジェクトを保存する
- 17. エンティティフレームワーク対Nhibernate
- 18. NHibernate:1対多
- 19. nhibernateでSaveOrUpdateメソッドを使用するときに保存されたアイテムを見つける方法はありますか?
- 20. WinFormsデータベースへの自動保存(対保存ボタン)
- 21. パフォーマンスnOibernateのSaveOrUpdateオブジェクト
- 22. EF4 ObjectContext対NHibernateセッション
- 23. NHibernateはsession.BeginTransaction()対transaction.Begin()
- 24. NHibernate先物対CreateMultiCriteria
- 25. Fluent Nhibernate多対多リレーションシップ/依存関係の階層
- 26. 流暢NHibernateは複合キーで保存エンティティ
- 27. NHibernateの多対多マッピング
- 28. NHibernateと一対一のマッピング
- 29. 設定の保存:XML対SQLite?
- 30. 多対多の関係に保存
通常、SaveOrUpdate()は必要ありません。なぜなら、NHibernateはロードされたすべてのオブジェクトに変更を追跡するからです。オブジェクトを更新するには、Session.Get()を使用して、Session.Flush()を呼び出して変更します。 –
'SaveOrUpdate()'または 'Flush()'/'Commit()'というコードでは、もっと読みやすく意図的なコードは何ですか?それとも(意味論的なものであれ他のものであれ)違いはありませんか? –
セッションを明示的にフラッシュする必要はないでしょう。トランザクションをコミットするか、セッションがスコープから外れた場合、または変更が破棄された場合、変更は自動的に永続化されます(何らかの理由で、ID生成などが必要な場合は早めに)。フラッシュは、読んだアイシングや他のエソテリカのために自動的に変更を強制する必要があるときに意図を明らかにする(私にとって) NHに精通している人なら、添付されたエンティティのための暗黙の 'Update'も理解するでしょう。したがって、私は明示的な' SaveOrUpdate'ステートメントと同じように思う傾向があります。 –