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");

问题是行:

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

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

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

是否有针对此的现有解决方案,或者唯一的选择是不对此类列使用转换器?

4

1 回答 1

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 作为复合键。不正确的转换器是此问题的症状,但错误消息非常具有误导性。

于 2013-10-02T12:41:31.780 回答