我已经创建了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
1}},预期的列称为Price_Currency
和Price_Amount
。
我想要的是更改此约定以删除下划线,但我不知道如何或是否可能。
答案 0 :(得分:1)
CustomType<T>()
方法有一个重载,接受columnPrefix
作为参数。默认行为是传递属性名称+&#34; _&#34;作为这个价值。明确指定值会得到所需的结果:
public virtual void Apply(IPropertyInstance instance)
{
instance.CustomType<TUserType>(instance.Name);
}