2012-03-06 9 views
0

NHibernateがIdフィールドに値を代入/生成するときに知りたいことがあります。エンティティがリポジトリに保存されたら?複合語ファイル名を作成するには、Product Idを使用する必要があります。しかし、リポジトリにエンティティを保存する前にIdを使用すると、Guid.Emptyが得られます。いつNHibernateでIDが生成されるのですか

ありがとうございます!

答えて

4

なぜ保存が行われる前にIdを使用する必要があるのだろうと思いますか?確かにデータベースにコミットされた後にIdを使用することは正しいアプローチです。結局のところ、Idを使用してデータベースがエンティティを永続化していないことが判明した場合、これにより望ましくない副作用が発生します。

しかし、回避策がありますが、あまりうまくありません。

idジェネレータを割り当てに設定します。これにはいくつかの注意点がありますが、NHibernateはこれが新しいエンティティか、更新が必要なものかを検出できないため、SaveOrUpdateを使用することはできません。これは、あなたの答えを下のリンクを参照してくださいSaveまたはUpdate方法を明示的

+0

エンティティを保存する前に、エンティティのプロパティ(エンティティの 'Id'と組み合わされた画像へのパス)を設定する必要があるので、私は尋ねています。だから、私は完全な書き方をしてはならないと思われる。エンティティを保存します。 'Id 'を使うことができるときにもう一つの書き込み操作を行います。 '更新 'を行います。右? – lexeme

+0

有効な点はありますが、最初にテーブルにパスを挿入するのではなく、計算された/結合された列を使用して 'select'ステートメントのpathとIdカラムを組み合わせることができます。 – Rippo

+0

あまりにも良い点!ありがとう! – lexeme

0

を使用する必要がありますいずれかのことを意味し

http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-id

「しかし、私はリポジトリにエンティティを保存する前に、IDを使用しないとき私はGuid.Emptyを取得する - > idは一度データベースに保存されたレコードを生成します...あなたがidを望むなら、私は IDジ​​ェネレータでは、レコードを作成する前にidをdbに保存することができます。

関連する問題