我想将两者外键映射为POCO属性和导航属性。示例here中的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()
指令总是创建一个额外的列。
答案 0 :(得分:4)
你没有在NHibernate中两次映射相同的关系。
只是:
References(x => x.Parent, "ParentID")
然后你用它来获得FK值:
var parentId = obj.Parent.Id;
或者这个分配它:
obj.Parent = session.Load<TheClassOfTheParent>(parentId);
这些语句都不会导致db调用。
答案 1 :(得分: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();