3

子クラスの2つのリストを持つ親クラスがあります

    public class Parent
    {
        ...

        public virtual ICollection<Foo> Foo{ get; set; }

        public virtual ICollection<Bae> Bar{ get; set; }
    }

    public class Foo
    {
        ...

        public virtual Parent Parent{ get; set; }
    }

    public class Bar
    {
        ...

        public virtual Parent Parent{ get; set; }
    }

マッピングは

        public ParentMap()
        {
            ...

            HasMany(m => m.Foo).AsSet().Cascade.All();
            HasMany(m => m.Bar).AsSet().Cascade.All();
        }

        public FooMap()
        {
            ...

            References(m => m.Parent);
        }

        public BarMap()
        {
            ...

            References(m => m.Parent);
        }

親オブジェクトを保存するたびに取得します

INSERT Parent ...
INSERT Foo with Parent_id set to NULL
INSERT Bar with Parent_id set to NULL
UPDATE Foo set Parent_id to Parent id
UPDATE Bar set Parent_id to Parent id

余分な更新を避けるために関係を設定する以外に方法はありますか?Inverse

4

2 に答える 2

10

双方向の関連付けがある場合は、HasMany 側を逆に設定する必要があります。これが最も一般的な方法です。

もう 1 つの可能性は、親参照を に設定することですNot.Insert().Not.Update()。その場合、親プロパティは挿入/更新に対して完全に無視されます。

子から親への参照が必要ない場合は、クラスとマッピングから削除して、コレクションのみを取得します。

Not.KeyNullable()HasMany に追加で設定できる 2 番目と 3 番目の方法では、NHibernate が既に設定されている親 ID を持つ新しい行を挿入し、追加の更新ステートメントを回避します (この機能には NHibernate 3.2.0 が必要です)。

于 2011-11-07T11:55:06.260 に答える
1

私の知る限り、そうではありません。逆プロパティを設定することで、関連付けの所有者を指定します。

逆のプロパティを指定することがなぜ問題なのですか?

于 2011-11-07T11:21:35.447 に答える