3

外部キーを POCO プロパティナビゲーション プロパティの両方にマップしたいと考えています。ここの例のIE 、答えは外部キーを置き換えます

 public virtual int SongArtistID { get; set; }

そのキーをマッピングに保持したい。私はこれまでに試しました:

Map(x => x.ParentID);
References(x => x.Parent).Column("ParentID");

Map(x => x.ParentID);
References(x => x.Parent, "ParentID");

流暢なマッパーを使用した他の多くの組み合わせですが、うまくいきません。問題は、References()ディレクティブが常に余分な列を作成することです。

4

2 に答える 2

4

NHibernateで同じ関係を2回マップすることはありません。

それはただ:

References(x => x.Parent, "ParentID")

次に、これを使用してFK値を取得します。

var parentId = obj.Parent.Id;

またはこれを割り当てます:

obj.Parent = session.Load<TheClassOfTheParent>(parentId);

そして、これらのステートメントはいずれもdb呼び出しにはなりません。

于 2012-09-16T02:30:19.103 に答える
3

結局のところ、私が示した方法でのマッピングはまったく問題ありませんでした。余分なフィールドの問題は、関係の反対側によって作成されました。私が持っていたのは:

class ParentMap

        HasMany(x => x.Children)
            .Inverse()
            .Cascade.All();

class ChildMap

        Map(x => x.ParentID);
        References(x => x.Parent).Column("ParentID");

HasMany()次のように、実際にReference()は子の列ではなく、親の列を指定する必要がありました。

class ParentMap

        HasMany(x => x.Children)
            .KeyColumn("ParentID") // Problem without this!
            .Inverse()
            .Cascade.All();
于 2012-09-17T09:20:59.027 に答える