2011-03-14 15 views
4

かなり新しいnHibernateです。私は2つのテーブル "User"と "UserProfile"の間に次の1対1のマッピングをセットアップしました。"指定されたキーが辞書に存在しませんでした" nHibernate C#

User.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"   namespace="Core.Domain.Model" assembly="Core"> 

    <class name="User" table="Users" dynamic-update="true" lazy="false"> 
    <cache usage="read-write"/> 
    <id name="UserId" column="UserId" type="guid"> 
    </id> 
    <one-to-one name="UserProfile" class="UserProfile"/> 
    </class> 
</hibernate-mapping> 

UserProfile.hbm.xml:

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" namespace="Core.Domain.Model" assembly="Core"> 
<class name="UserProfile" table="UserProfiles" dynamic-update="true" lazy="false"> 
    <cache usage="read-write"/> 
    <id name="UserProfileId" column="UserProfileId" type="int"> 
     <generator class="native"/> 
    </id> 
    <property name="Description" length="100"/> 
    <many-to-one name="User" unique="true" column="UserId"/> 
    </class> 
</hibernate-mapping> 

マイPOCOS上記のマッピングがあるために:今すぐ

public class User 
    { 
     public virtual Guid UserId { get; set; } 
     public virtual UserProfile UserProfile { get; set; } 

    } 

public class UserProfile 
    { 
     public virtual int UserProfileId { get; set; } 
     public virtual User User { get; set; } 
    } 

は私がしようとすると、私の "User"オブジェクトを永続させる例外が発生する: "指定されたキーが存在しない次の行の辞書」で:

using (ISession session = SessionFactory.OpenSession()) 

誰もがここで起こって何ができるか知っていますか?

+0

私は考える前に、このエラーを見たことがあります。アプリを再構築してもう一度実行してみてください。スローされる最初の例外が何であるかを見てください。 – jjnguy

+0

用量が持続するコードとして表示できますか? –

+0

ちょうどいいです。同じ例外がスローされます。 – kartikq

答えて

4

hbmマッピングとクラスをテストプロジェクトにコピーしました。 SessionFactoryを作成するときにエラーが発生しました。あなたのusingステートメントに最初にアクセスしたときに、SessionFactoryを作成していますか?もしそうなら、これがうまくいけば、問題を解決します:

は私がのUserProfileクラスに

public virtual String Description { get; set; } 

を追加することによって、それを修正しました。 あなたのコードにそれがあり、コピー&の貼り付け中に忘れてしまった場合は、さらに調査を試みます。

編集:

このエラーの別の可能なソース - hereを見つけたよう:

すべての.hbm.xmlファイルが埋め込まれたリソースであることを確認してください。

これでも解決しない場合は、例外のStackTraceを投稿してください。

+0

ああ私はそれを持っています。コピー - 大失敗。それを指摘してくれてありがとう。 – kartikq

+0

@kartikqこの回答があなたを助けたのであれば、なぜそれを選択された回答として選択しなかったのでしょうか、少なくともそれを投票しましたか? –

+0

@Ilyaごめんなさい。アップアップされました! – kartikq

0

エラーはあいまいです。

私の場合は、動的に生成されたHQL文のために、条件があったにもかかわらず、HQL where句がありませんでした。ある

が、誤って生成されたHQLは、どこかのクエリを構築するチェーンに

from User u 
    left join u.Profile 
    (id = :id) 

のようなものだった、行方不明where句がありました。

from User u 
    left join u.Profile 
    where (id = :id) 
0

は同じ問題を抱えていた:それはなるように!私にとっては、kerzekが言ったように、同じ列名で1対1の参照をしていました。

<one-to-one name="Person" class="PersonClass" cascade="none" constrained="false" fetch="join"/> 
関連する問題