流畅的NHibernate映射单列到复合键

时间:2010-08-26 16:24:43

标签: fluent-nhibernate

我有一种情况,我在我的域模型中定义了一个实体,我希望在其中公开一个id列。

public class OfferedProduct  
{  
    public virtual string Id {get; set;}  

    //other properties
}

这将映射到的遗留数据库表是

CREATE TABLE ProductGrouping  
MemberNumber INT NOT NULL,
GroupId CHAR NOT NULL,
...

我不想通过引入两个属性并使用“CompositeId”构造映射它们来破坏域模型。

CompositeId().KeyProperty(x => x.MemberNumber).KeyProperty(x => x.GroupId)

理想情况下,我希望以{MemberNumber} {GroupId}的形式连接这两个值,并将其作为Id值公开。然后,我将使用自定义类型来处理从数据库中检索时这些值的连接方式,以及在保存/选择时将其拆分。

我注意到“CompositeId”方法不允许使用标准“Id”调用的customType;但“Id”方法不提供设置多个列的功能。我见过一些例子,人们使用“Map”来使用自定义类型组合两列,但不是id值。

我注意到“CompositeId”有一个可以采用自定义标识类的重载,但我不确定如何在这种情况下使用它。

 CompositeId<OfferedProductIdentifier>(x => x.?)

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

如果有人来这里

CompositeId()
    .KeyProperty(t => t.Id, c =>
        c.Type(typeof(MyUserType)).ColumnName("MemberNumber").ColumnName("GroupId"));