1

我创建了一个约定来对匹配类型的所有属性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具有属性Amount和的复合类型Currency,如果我的实体上有一个名为Price类型的属性Money,则预期的列称为Price_CurrencyPrice_Amount

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

4

1 回答 1

1

CustomType<T>()方法有一个接受columnPrefix作为参数的重载。默认行为是将属性名称 +“_”作为此值传递。明确指定值给出了期望的结果:

public virtual void Apply(IPropertyInstance instance)
{
    instance.CustomType<TUserType>(instance.Name);
}
于 2012-09-29T13:34:01.000 回答