2009-05-06 7 views
1

NHibernateを使用してコードベースを修正しています。GetやLoadを使用してIDでエンティティを検索する代わりに、クエリを使用していました。Nhibernate GetとLoad

評価:propertyNameValuesが "ID" とID値を含むIDictionnaryある

session.CreateCriteria(typeof(T)).Add(Expression.AllEq(propertyNameValues)).List<T>();

。交換しようと

session.Get<T>(id);

NHibernateのではありません存続は私のクラスが見つかりスローされます。

しかし、最初の方法としては明らかに1つの方法があります。私のgoogle-fuは、指定されたhbmを組み込みressourcesに設定することを忘れていたリンクや、nhibernate設定のマッピングアセンブリを見つけました。

Get(id)、Get(typeof(T)、id)、Get( "ClassName"、id)はすべて同じエラーをスローしました。ここで

要求されるようにマッピングされる(ありがとう)

<class name="Domain.Customers.Customer, Domain" table="Customer" lazy ="true"> 
    <id name="ID" column="id" access="field.lowercase-underscore" type="int"> 
     <generator class="identity" /> 
    </id> 

これは、1つのクラスのマッピングですが、それはすべて私のentititesのための一般的なのです。

ありがとうございます。

+0

あなたの質問を更新していただきありがとうございます。私はそれに応じて私の投稿を編集しました。 –

+0

これはもっと良いですか? –

+0

これは、リフレクションを介してこのメ​​ソッドを呼び出すという事実に関連しており、Genericクラスにあります。だから私は、ほとんどの場所でそれを間違った方法と呼ぶことにし、それが頻繁に呼び出されるクラスの基本メソッドを単にオーバーライドすることに決めました。ありがとう! – pmlarocque

答えて

1

"ID"はオブジェクトのIDプロパティとしてマップされていますか? Markが言っているように、よりよい答えを出すためにマッピングを見る必要があります。