2012-09-10 26 views
1

我有兩列映射到單一類型的這樣一個IUserType:如何使用Fluent NHibernate和IUserType將兩列映射到一個成員?

.... 
public object NullSafeGet(IDataReader rs, string[] names, object owner) 
{ 
    return new FooBar(rs[names[0]], rs[names[1]]); 
} 
.... 

我無法指定使用功能NHibernate兩個列名。我試過這個:

Map(x => x.Boz).Columns.Add("GLUB","SHERP").CustomType<FooBarUserType>(); 

但是第二列名稱被忽略。我如何使用Fluent NHibernate指定兩個列名?

回答

1

嘗試ICompositeUserType。這可以處理多個列。但有時同事忘記組件映射這往往是實用和更簡單的映射:

使用

Component(x=>x.Boz) //instead of Map(x=>x.Boz) 

,並創建一個ComponentMap映射類,如:

public class FooBarMap: ComponentMap<FooBar> 
     { 
      public FooBarMap() 
      { 
       Map(x => x.FoobarProp1); 
       Map(x => x.FoobarProp2); 
      } 
     } 

這將創建2列在您的原始表中(不爲FooBar實體創建自己的表):FooBarProp1和FooBarProp2。

與ICompositeUserType替代吸我的流利版本:我總是會收到錯誤消息「錯誤的列數」和像Columns.Clear()不會工作的提示。

問候, 邁克爾

1

我曾在一個項目我工作的同樣的問題。

我能夠得到它使用的工作如下:

Map(x => x.Boz).Columns.Add("GLUB").Columns.Add("SHERP").CustomType<FooBarUserType>(); 
相關問題