私のドメインでは、NHibernate(バージョン3.1)の観点から、完全に切断されたエンティティを扱います。したがって、私のプライマリドメインから私のrdbmsドメインにマッピングするとき、グラフには永続インスタンスと一時インスタンスが混在しているため、をrdbmsエンティティで呼び出します。すでに存在するものもあれば、新しいものもあればデータベースに追加する必要があるものもあります。 Session.Mergeの後のNHibernateオブジェクトグラフの更新されたインスタンスを取得する堅牢な方法は何ですか?
は私がSession
から得Post
のオブジェクトインスタンスを有し、からマッピングの結果として作成された新しい(過渡)Comment
インスタンスmyComment
、以下のモデル(擬似)
class Post
{
ISet<Comment> Comments { get; set; }
}
class Comment
{
Post Post { get; set; }
string UnimportantString { get; set; }
}
があると
私のドメインモデル。 私は、既存のPost
にこれを追加します。
myComment.Post = myPost;
myPost.Comments.Add(myComment);
myPost = Session.Merge(myPost);
が、これは仕事の単位に包まれていることをしてくださいと仮定します。 Session.Merge
をmyPost
と呼ぶことにより、NHibernateは、指定されたグラフ内の既存のインスタンスを変更せず、作成された、またはすでに第1レベルのキャッシュにある別のインスタンスを返します。返されたmyPost
には現在コメントの永続インスタンスが含まれていますが、元のmyComment
インスタンスには、自分のコードが参照を持つインスタンスは変更されていません。
変更したエンティティを元のドメインに戻したいのですが、から変更したComment
を選択する堅牢な方法がありません。私はmyPost.Comments.Last()
が今追加したものであるとは限りません。
私は確実に私が完了した取引の結果として、IDを取得することができるように、新たに合併myPost.Comments
セットは、例えば、私のオリジナルmyComment
インスタンスに相関しているエントリ相関したいです。オリジナルのmyCommentが新しいオブジェクトだったので、私はIDでそれを行うことはできません。これははるかに複雑なグラフの簡単な例です - 他のプロパティと深いグラフがあり、NHibernateの新しいインスタンスと、元のインスタンスとの信頼性の高い関連付けができるようにしたいのですが、myCommentにSaveOrUpdateを呼び出すことはできません。
Session.Merge(myPost)
の後に更新されたComment
を取得するための最良の方法は、それを私のプライマリドメインモデルにマップすることができますか?
p.s.私は私が私の簡単な例
p.p.s.で、Merge
への単一の呼び出し、次のだけではなく、この1 Comment
を参照することにも他のオブジェクトを持っているよう残念ながらちょうどmyComment = Session.Merge(myComment)
への呼び出しを変更することは十分ではありません
'UnimportantString' - YouTubeのコメントシステムでなければなりません。 – codekaizen