流畅的NHibernate - 应用自定义类型的约定

时间:2011-08-20 12:26:50

标签: c# fluent-nhibernate

我正在使用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'类型的所有属性,但我一直无法弄明白。

对此的任何帮助将不胜感激。

1 个答案:

答案 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())