流畅的NHibernate CompositeId KeyReference到非键列

时间:2016-06-28 18:04:44

标签: nhibernate fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

我正在使用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");
}

我告诉我,从NetResource的映射是正确的:

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}}时,是否可以指定特定列?

0 个答案:

没有答案