2011-08-20 56 views
2

我使用流利NHibernate(自動映射)將我的域對象映射到數據庫表。我創建了自己的'Date'類,我使用'DateTranslator'映射 - NHibernate的'IUserType'的實現。流利的NHibernate - 應用自定義類型的慣例

public class MyDomainObject : DomainObject 
{ 
    public Date Date { get; set; } 
} 

public class MyDomainObjectMappingOverride : IAutoMappingOverride<MyDomainObject> 
{ 
    public void Override(AutoMapping<MyDomainObject> mapping) 
    { 
     mapping.Map(x => x.Date).CustomType(typeof(DateTranslator)); 
    } 
} 

正如你所看到的 - 我已經創建了一個映射覆蓋的領域對象,這樣我可以指定要用於映射「日期」屬性的自定義類型。

現在 - 這意味着我必須爲包含'Date'類型的屬性的所有域對象創建映射覆蓋。

我想在這裏使用一個約定,以便'DateTranslator'將用於映射'Date'類型的所有屬性,但我一直無法弄清楚。

任何幫助,這將不勝感激。

回答

2
public class MyUsertypeConvention : IPropertyConvention 
{ 
    public void Apply(IPropertyInstance instance) 
    { 
     if (instance.Type.Name == "Date") 
     //or 
     //if (instance.Type.GetUnderlyingSystemType() == typeof(Date)) 
      instance.CustomType<DateTranslator>(); 
    } 
} 

和配置例如

如果您嘗試應用自定義類型的屬性,以被認爲是默認的參考
FluentMappings.Conventions.Add(new MyUsertypeConvention()) 
+1

將無法​​工作。 –

+1

然後你忘了從automapping中排除自定義類型。覆蓋布爾ShouldMap(t){返回t!= typeof(日期)&& base.ShouldMap(t); }' – Firo

+0

我也有這個問題。看起來,ShouldMap(類型類型)永遠不會被調用我的屬性,它具有自定義基元類型,但它也不會觸及我的IPropertyConvention。有什麼顯而易見的,我可能錯過了? – DavGarcia

相關問題