2011-09-16 10 views
0

NHibernateが親の外部キーなしで子エンティティを挿入している理由を理解できません。 これを解決するために私が見つけた唯一の方法は、双方向関係です。別の方法がありますか?ここでFluent NHibernateはHasMany関係に親IDの問題を挿入します

はクラスです:私は親の子コレクションに子を追加し、親、親と子を保存するとここで

public class Parent 
{ 
    public virtual int ParentId {get; private set;} 
    public virtual IList<Child> Notes {get; private set;} 
} 

public class Child 
{ 
    public virtual ChildId {get; private set;} 
    public virtual Name {get; private set;} 
} 

は私の流暢NHibernateのマッピングは

public class ParentClassMap : ClassMap<Parent> 
{ 
    public ParentClassMap(){ 
     Id(x => x.ParentId); 
     HasMany(x => x.Notes).Cascade.AllDeleteOrphan(); 
    } 
} 

public class ChildClassMap : ClassMap<Child> 
{ 
    public ChildClassMap() { 
     Id(x => x.ChildId); 
     Map(x => x.Name); 
    } 
} 

されていますデータベースに挿入されましたが、子は親に外部キーなしで挿入されています(ヌル値)

これは生成される挿入物です:

INSERT INTO Child(ChildId, Name) 

しかし、それは次のようになります。私は双方向の関係でこれを解決しないことを追加したい

INSERT INTO Child(ChildId, Name, ParentId) 

、私は子供が親への参照を持っている必要はありません。 。ありがとう!!

答えて

-1

あなたの親クラスのマッピングはその子のための逆を持っている必要があり

public class ParentClassMap : ClassMap<Parent> 
{ 
    public ParentClassMap(){ 
     Id(x => x.ParentId); 
     HasMany(x => x.Notes).Cascade.AllDeleteOrphan().Inverse(); 
    } 
} 

おかげ Neelesh

+0

これは、双方向の関連付けがないため、保存操作がまったく行われません。 – cremor

+0

あなたはあなたが言ったことは間違いありません。関係が双方向にならない理由は何ですか? – Neelesh

+0

ドメインクラスで双方向の関連付けが不要(または必要)である可能性が高いためです。保存するためのオブジェクト参照を持つことは、あまり「永続性を知らない」ことではありません。 – cremor

1

は、あなたのHasManyマッピングにNot.KeyNullable()を追加します。

注:この機能には、Hibernate 3.2が必要です。

+0

これは私の場合の問題を解決しました! – Robert

関連する問題