我正在使用Fluent NHibernate(自动映射)将我的域对象映射到数据库表。我创建了自己的'Date'类,我使用'DateTranslator'进行映射 - 这是NHibernate的'IUserType'的实现。
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'属性的自定义类型。
现在 - 这意味着我必须为包含“Date”类型属性的所有域对象创建映射覆盖。
我想在这里使用一个约定,以便'DateTranslator'将用于映射'Date'类型的所有属性,但我一直无法弄明白。
对此的任何帮助将不胜感激。
答案 0 :(得分: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())