NHibernate
がIdフィールドに値を代入/生成するときに知りたいことがあります。エンティティがリポジトリに保存されたら?複合語ファイル名を作成するには、Product Id
を使用する必要があります。しかし、リポジトリにエンティティを保存する前にId
を使用すると、Guid.Empty
が得られます。いつNHibernateでIDが生成されるのですか
ありがとうございます!
NHibernate
がIdフィールドに値を代入/生成するときに知りたいことがあります。エンティティがリポジトリに保存されたら?複合語ファイル名を作成するには、Product Id
を使用する必要があります。しかし、リポジトリにエンティティを保存する前にId
を使用すると、Guid.Empty
が得られます。いつNHibernateでIDが生成されるのですか
ありがとうございます!
なぜ保存が行われる前にId
を使用する必要があるのだろうと思いますか?確かにデータベースにコミットされた後にId
を使用することは正しいアプローチです。結局のところ、Id
を使用してデータベースがエンティティを永続化していないことが判明した場合、これにより望ましくない副作用が発生します。
しかし、回避策がありますが、あまりうまくありません。
id
ジェネレータを割り当てに設定します。これにはいくつかの注意点がありますが、NHibernateはこれが新しいエンティティか、更新が必要なものかを検出できないため、SaveOrUpdate
を使用することはできません。これは、あなたの答えを下のリンクを参照してくださいSave
またはUpdate
方法を明示的
を使用する必要がありますいずれかのことを意味し
http://www.nhforge.org/doc/nh/en/index.html#mapping-declaration-id
「しかし、私はリポジトリにエンティティを保存する前に、IDを使用しないとき私はGuid.Emptyを取得する - > idは一度データベースに保存されたレコードを生成します...あなたがidを望むなら、私はが IDジェネレータでは、レコードを作成する前にidをdbに保存することができます。
エンティティを保存する前に、エンティティのプロパティ(エンティティの 'Id'と組み合わされた画像へのパス)を設定する必要があるので、私は尋ねています。だから、私は完全な書き方をしてはならないと思われる。エンティティを保存します。 'Id 'を使うことができるときにもう一つの書き込み操作を行います。 '更新 'を行います。右? – lexeme
有効な点はありますが、最初にテーブルにパスを挿入するのではなく、計算された/結合された列を使用して 'select'ステートメントのpathとIdカラムを組み合わせることができます。 – Rippo
あまりにも良い点!ありがとう! – lexeme