可以在Fluent NHibernate约定中控制CompositeUserType的列名吗?

时间:2012-09-29 12:58:50

标签: fluent-nhibernate

我已经创建了IUserTypeConvention约定,以便在匹配类型的所有属性上使用ICompositeUserType实现:

public abstract class CompositeUserTypeConvention<TUserType> 
    : IUserTypeConvention
    where TUserType : ICompositeUserType, new()
{
    public virtual void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
    {
        var userType = new TUserType();

        criteria.Expect(x => x.Type == userType.ReturnedClass);
    }

    public virtual void Apply(IPropertyInstance instance)
    {
        instance.CustomType<TUserType>();
    }
}

应用此选项时,FluentNHibernate使用{memberpropertyname}_{compositepropertyname}约定为复合类型的每个属性生成列名。

对于像Money这样的复合类型,其属性为AmountCurrency,如果我在我的实体上有一个名为Price的属性Money 1}},预期的列称为Price_CurrencyPrice_Amount

我想要的是更改此约定以删除下划线,但我不知道如何或是否可能。

1 个答案:

答案 0 :(得分:1)

CustomType<T>()方法有一个重载,接受columnPrefix作为参数。默认行为是传递属性名称+&#34; _&#34;作为这个价值。明确指定值会得到所需的结果:

public virtual void Apply(IPropertyInstance instance)
{
    instance.CustomType<TUserType>(instance.Name);
}