如何解决列名称约定
| 我想指定一个列名约定,该约定基本上采用pascal大小写的字段并将其转换为带下划线的所有大写字母。因此,属性OrderId变为列\“ ORDER_ID \”。我也希望仅当我尚未在映射中指定一个约定时才应用此约定。到目前为止,我的骨架如下:public class PascalCaseColumnNameConvention : IPropertyConvention
{
public bool Accept(IPropertyInstance instance)
{
//Not sure what I should have here
}
public void Apply(IPropertyInstance instance)
{
instance.Column(instance.Property.Name.ChangePascalCasetoUnderscore());
}
}
除了字符串扩展方法以外,还有没有更好的方法来更改大小写?有没有已经在做这种事情的图书馆?
解决方法
在这种情况下,使用
Accept
方法时,您应该只选择return true
。此方法用于确定约定是否应适用于给定的实例,例如,您可能只想更改int
型字段等的默认名称。如果要定义常规约定,true
表示\“接受所有实例\”。不过,仍然可以通过在映射中指定列名称来覆盖它。
关于更改大小写-我也不知道这样的库。但是任务很简单,因此您的解决方案在这里看起来很合理。
编辑
好吧,您使用的是哪个FNH版本?我看不到IPropertyConvention
具有bool Accept
方法。
您可以在此处实现IPropertyConvention
(仅使用void Apply
)和IPropertyConventionAcceptance
(使用Accept
方法的工作方式有所不同)。尝试类似的事情(尚未测试):
public class PascalCaseColumnNameConvention : IPropertyConvention,IPropertyConventionAcceptance
{
public void Accept(IAcceptanceCriteria<IPropertyInspector> criteria)
{
criteria.Expect(x => !x.Columns.HasUserDefined());
}
public void Apply(IPropertyInstance instance)
{
instance.Column(instance.Property.Name.ChangePascalCaseToUnderscore());
}
}
我还发现一个整洁的类可以进行很多有用的字符串转换-请参见Inflector。但是无论如何,如果您只需要这种特定的转换,我将保留自己的简单解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。