gpt4 book ai didi

fluent-nhibernate - 列名约定

转载 作者:行者123 更新时间:2023-12-04 07:44:03 25 4
gpt4 key购买 nike

我想指定一个列名约定,该约定基本上采用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。但是无论如何,如果您只需要这种特定的转换,我将保留自己的简单解决方案。

关于fluent-nhibernate - 列名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5681354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com