我正在使用旧数据库并尝试使用某些表格创建地图。
用户,个人资料的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上接收空值。
是否有现成的解决方案,或者只是选择不对这类列使用转换器?
答案 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作为复合键。转换器不正确是此问题的症状,但错误消息非常误导。