具有复合键的流畅NHibernate自定义类型,用作对另一个表的引用

时间:2013-10-02 07:00:23

标签: nhibernate fluent-nhibernate composite-key

我正在使用旧数据库并尝试使用某些表格创建地图。

用户,个人资料的Theres个人资料参考了联系渠道。但是,在用户的数据库密钥中是复合密钥。这有点好,但是数据库中有一些神奇的字符串,如果它们可以转换为更多类型的版本,应该是很好的。

在个人资料地图中:

    CompositeId()
    .KeyProperty(x => x.ServiceId, "SERVICE_ID")
    .KeyProperty(x => x.Direction, "DIRECTION").CustomType<DirectionConverter>()
    .KeyReference(x => x.Channel, new string[] { "CHANNEL_ID", "CONTACT_TYPE", "DIRECTION", "SERVICE_ID" })
    .KeyProperty(x => x.ContactType, "CONTACT_TYPE")
    .KeyReference(x => x.Agent, "AGENT_ID");

问题在于:

.KeyReference(x => x.Channel, new string[] { "CHANNEL_ID", "CONTACT_TYPE", "DIRECTION", "SERVICE_ID" })

(所以频道也有复合键......)

在该参考文献中,我不知道如何告诉流利的nhibernate使用转换器进行“DIRECTION”列处理。在实践中,这可以看作转换器将在NullSafeSet上接收空值。

是否有现成的解决方案,或者只是选择不对这类列使用转换器?

1 个答案:

答案 0 :(得分:1)

解决。

映射不正确。

    CompositeId()
    .KeyProperty(x => x.ServiceId, "SERVICE_ID")
    .KeyProperty(x => x.Direction, "DIRECTION").CustomType<DirectionConverter>()
    .KeyReference(x => x.Channel, new string[] { "CHANNEL_ID", "CONTACT_TYPE", "DIRECTION", "SERVICE_ID" })
    .KeyProperty(x => x.ContactType, "CONTACT_TYPE")
    .KeyReference(x => x.Agent, "AGENT_ID");

正确版本:

CompositeId()
    .KeyReference(x => x.Channel, new string[] { "CHANNEL_ID", "CONTACT_TYPE", "DIRECTION", "SERVICE_ID" })
    .KeyReference(x => x.Agent, "AGENT_ID");

现在我可以在此类中使用ChannelId,ContactType,Direction,ServiceId,AgentId作为复合键。转换器不正确是此问题的症状,但错误消息非常误导。