2009-10-14 168 views
20

我需要通過編寫一個實現IUserType的新映射程序類來爲NHibernate創建custom type。雖然它是相對簡單的覆蓋大部分的方法和屬性,我得到了一些困難,瞭解如何與以下成員正確處理:如何正確實現IUserType?

  • object Assemble(object cached, object owner);
  • object DeepCopy(object value);
  • object Disassemble(object value);
  • object Replace(object original, object target, object owner);

我不明白他們的目的究竟是什麼;更重要的是如何正確實施它們。我見過的大多數例子都只是返回原始輸入參數。

public object DeepCopy(object value) 
{ 
    return value; 
} 

public object Replace(object original, object target, object owner) 
{ 
    return original; 
} 

public object Assemble(object cached, object owner) 
{ 
    return cached; 
} 

public object Disassemble(object value) 
{ 
    return value; 
} 

如何實現那些在真實的情況下,或更復雜的情況下正確的方法

回答

10

看一看僅限Ritesh饒是如何在他的NCommon框架做到了這一點:

MoneyUserType實現名爲CompositeUserTypeBase

一個基類有一個在評論更多的細節,但總結:

  • DeepCopy - 應返回持久狀態的深層副本,在實體和收藏處停止
  • 反彙編 - 轉換o投入其「可緩存」表示(即,協會必須緩存爲標識符值)
  • 組裝 - 從緩存表示重建對象

It's explained in a lot more detail here

+0

當時的鏈接導致一篇非常有趣的文章。非常感謝。 – 2009-10-19 11:17:52

+2

該鏈接無效 – Cherian 2010-01-04 05:13:26

+0

謝謝,鏈接已修復 – rohancragg 2010-01-04 11:43:56

5

你可能想看看這個article。這是如何實現IUserType接口的一個很好的例子。

+1

該鏈接現已死亡.... – 2012-04-24 15:57:17

+2

@ Peter McEvoy在懶人網站上的纏擾者已經應用了修復藥膏...... – 2012-04-24 20:35:29