2010-08-26 79 views
1

我有一种情况,我已经在我的域模型中定义了一个实体,我想在其中公开一个id列。流利的NHibernate映射单列到复合键

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”方法不允许customType与标准的“Id”调用一样;但“Id”方法不提供设置多个列的功能。我看过一些例子,其中人们使用“地图”来使用自定义类型组合两列,但不使用ID值。

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

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

任何帮助将不胜感激。

回答

0

万一有人来这里

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