2012-03-05 11 views
3

ユーザーが添付ファイル付きの電子メールメッセージを送信できるアプリを開発しています。次のように両方の電子メールと添付ファイルのドメインオブジェクトは、ヒロのidジェネレータとして定義されています:コミット前のNhibernate HiLoのid値

<id name="Id"> 
    <generator class="hilo" /> 
</id> 

NHibernateのは、列がnext_hiでhibernate_unique_keyという名前のテーブルを持つスキーマを生成します。

電子メールに添付ファイルを追加すると、内部的に添付ファイルの一覧に添付ファイルオブジェクトが追加され、追加された内容がユーザーに表示されるようにバインドされます。 オプションで、以前に追加した添付ファイルを選択し、[削除]ボタンをクリックしてリストから削除することができます。 問題は、オブジェクトがデータベースに保存されていないため、添付ファイルのIDが割り当てられていないため、リストから削除する添付ファイルobjを一意に識別できません。

保存する前にオブジェクトにid値を割り当てる方法はありますか?私はhiloアルゴリズムの使い方をよく理解していないと思いますし、それが主な目的です。

答えて

4

HiLoを使用して、識別子をデータベースへのラウンドトリップなしで割り当てることができます。ここで

private void CreateNewEmail_Click(object sender, EventArgs e) 
{ 
    // start a transaction so that all our objects are saved together. 
    this.transaction = this.session.BeginTransaction(); 
    this.currentEmail = new Email(); 
} 

private void AddAttachment_Click(object sender, EventArgs e) 
{ 
    var attachment = new Attachment(); 
    // set the properties. 

    // Add it to the session so that the identifier is populated (no insert statements are sent at this point) 
    this.session.Save(attachment); 

    // Also add it to the email 
    this.currentEmail.Attachments.Add(attachment); 
} 

private void SendEmail_Click(object sender, EventArgs e) 
{ 
    // Commit the transaction (at this point the insert statements will be sent to the database) 
    this.transaction.Commit(); 
} 

あなたは、ハイローとNHibernateは少し良く理解も役立つかもしれないリンクのカップルです:(添付ファイルを削除し、例外などを処理するために食料調達する必要があります)、このようなものは、何をする必要です。

http://ayende.com/blog/3915/nhibernate-avoid-identity-generator-when-possible

http://nhforge.org/blogs/nhibernate/archive/2009/03/20/nhibernate-poid-generators-revealed.aspx

+0

は、彼はまた、いくつかのラウンドトリップを防ぐために、ハイローアルゴリズムによって生成された割り当てられたIDを行うことができませんでしたか?この戦略では、複数の添付ファイルをバッチ処理に追加することが望ましいでしょう。 – Fourth

+0

私は私が従うと、HiLoアルゴリズムによってIDが生成され、session.Save()を呼び出すときにセッションによって割り当てられるが、バッチ処理に最適なこの時点でデータベースヒットは発生しない。 –

+0

私は推測するこれは、彼のトランザクションスコープがユーザーの行動(私の意見では危険なパターン)で発生することを望む場合には有効です。もし彼が彼の取引をより高い範囲に設定すれば、もう少し考えが必要になります。 – Fourth

関連する問題