2013-10-02 38 views
1

我正在與舊數據庫,並嘗試創建與某些表的地圖。流利的NHibernate自定義類型與複合關鍵是用作參考到另一個表

Theres profile for user,profile has reference to contact channel。但是,在用戶的數據庫密鑰中是複合密鑰。這有些不錯,但是在數據庫中有一些神奇的字符串,如果它們可以轉換爲更多類型的版本,那應該是很好的。

在剖面圖:

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

已解決。

映射不正確。

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

現在我可以使用渠道ID,ContactType,方向,SERVICEID,AGENTID在這個類複合鍵。錯誤的轉換器是這個問題的症狀,但錯誤信息非常具有誤導性。