2009-03-12 7 views
2

Id列でジェネレータを指定できます。完璧。nHibernateプロパティの値を生成できますか?

ただし、nullの場合は、生成された値をプロパティ列に割り当てる必要があります。インボイステーブルの行に沿って、サロゲート主キー列と請求書番号列があると考えてください。

CREATE TABLE dbo.Invoice (InvoiceId INT NOT NULL PRIMARY KEY IDENTITY(1,1), InvoiceNumber INT NOT NULL, InvoiceDate DATETIME NOT NULL, remaining columns...)

これが既定値ではありません。請求書番号には、世代の周りに一定の規則があるかもしれません。私は実際の世代を処理するC#クラスを持っていますが、Invoiceクラスのプロパティの値を設定する方法を見つける必要があります。

理想的には、私がマッピングのIdに対して行うようなプロパティのジェネレータを指定することができます。残念ながら、それは私が決定できるものからは不可能と思われます。私は間違っていると思っています。

私はトリガを使用して、世代をプロバイダに挿入するような、他の非nHibernateオプションを使用できます。しかし、私はそれをコーディングオプションではなく設定オプションにしておきたいと思います。

このような能力があるかどうかは誰にも分かりますか?

答えて

0

遅くとも申し訳ありませんが、私は最近あなたと同じ問題に遭遇しました。私はNHibernateのソースで少しのバックトレースをして、解決策を見つけたようです。

Guid生成にNHibernate.Id名前空間を使用できます。実行可能な2つのオプションがあります。クライアントがGuidを生成するようにしたり、ネイティブDBに実行させることができます。

  • NHibernate.Id.NativeGuidGenerator // DB生成
  • NHibernate.Id.GuidGenerator //クライアント生成NHibernate.Idを使用して

これらはあなたが必要とするクラスです。 NativeGuidGeneratorクラスは、次のような方法で実現できます。

public Guid GetNewSessionId() 
{ 
    NHibernate.Id.NativeGuidGenerator guidGen = new NHibernate.Id.NativeGuidGenerator(); 
    return (Guid)(guidGen.Generate((NHibernate.Engine.ISessionImplementor)anOpenSession, null)); 
} 

それに幸い:)

0

デフォルト値を指定しますか?

私はあなたが本当にNHibernateのは、このの世話をすることにしたい場合、私はあなたが値を設定しますインターセプタを作成するべきだと思い

...これはあなたがDBのレベルで指定するべきものであるべきだと思いますそのプロパティの値がフラッシュ時にnullの場合

または、プロパティにコンストラクタのデフォルト値を指定することで、エンティティのデフォルト値を指定できます。

+0

デフォルト値ではありません。新しいエンティティが保存されるときに生成される一意の値。私は迎撃兵について忘れてしまった。 – Cory

2

NHibernateは、コンストラクタなどで、これらのすべてのルールをドメインクラスで定義することを想定しています。