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 中两次映射相同的关系。

只是:

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 回答