我正在使用NHibernate处理棕色字段数据库,我无法更改其架构。在此数据库中,有一个包含复合主键的多对多表。
public ResourceNetMap()
{
Table("resource_net");
CompositeId()
.KeyReference(n => n.Net, "net")
.KeyReference(n => n.Resource, "resource_sk");
}
遗憾的是,这个密钥的一半(Net
)不是被引用实体的id(net_sk
)。使用此配置时,当我尝试从ResourcesNet
访问Net
时,非法访问加载集合将引发异常。
如果我将该属性视为KeyProperty
中的CompositeId
,我可以使地图正常工作:
public ResourceNetMap()
{
Table("resource_net");
CompositeId()
.KeyProperty(n => n.NetName, "net")
.KeyReference(n => n.Resource, "resource_sk");
}
我告诉我,从Net
到Resource
的映射是正确的:
HasMany(x => x.Resources)
.AsSet()
.KeyColumn("net") // name of column in many-to-many table
.PropertyRef("NetName") // specifies which column to use to join
.LazyLoad()
.Inverse()
.Cascade.AllDeleteOrphan();
因此,似乎我需要做的是指定KeyReference
应该如何连接到父级,但是没有想到使用流畅或HBM映射。使用KeyReference
的{{1}}时,是否可以指定特定列?