0

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

クラスは次のとおりです。

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;}
}

これが私のFluent 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);
    }
}

親の子コレクションに子を追加して親を保存すると、親と子がデータベースに挿入されますが、親への外部キーなしで子が挿入されます (null 値があります)。

これは、生成される挿入です。

INSERT INTO Child(ChildId, Name)

ただし、次のようにする必要があります。

INSERT INTO Child(ChildId, Name, ParentId)

これを双方向の関係で解決したくないことを付け加えておきます。子に親への参照を持たせたくありません。ありがとう!!

4

2 に答える 2

1

マッピングに追加Not.KeyNullable()します。HasMany

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

于 2011-09-16T07:03:44.600 に答える
-1

親クラスのマッピングには、子の逆を含める必要があります

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

ありがとうNeelesh

于 2011-09-16T06:14:18.597 に答える