从 属性 名称获取 OrmLite 数据库列名称

Get OrmLite database column name from property name

假设我有这个 class:

public class FooBar
{
    public long Id {get; set;}
    public string BarFoo {get; set;}
}

OrmLite 在使用 postgresql 时将创建 table 名称 foo_bar 和列 id,以及 bar_foo.

我可以获得 table 名称以用于自定义查询,如下所示:

db.ExecuteSql($"INSERT INTO {db.GetTableName<SomeOtherClass>()}(bar_foo) SELECT bar_foo FROM {db.GetTableName<FooBar>()}");

如果命名约定更改或 属性 被重命名,则查询中断,因为列 bar_foo 被定义为字符串。

如何以与定义 table 名称相同的方式定义列名称?

您可以从方言提供程序获取 table 和列名,例如:

var dialect = db.Dialect(); //older API db.GetDialectProvider()

根据他们的名字,它将使用配置的 NamingStrategy:

var tableName = dialect.GetQuotedTableName(nameof(FooBar));
var columnName = dialect.GetQuotedColumnName(nameof(FooBar.BarFoo));

通过 OrmLite 的模型和字段定义,它还将使用模型上定义的任何 RDBMS [Alias] 自定义:

var modelDef = typeof(FooBar).GetModelMetadata();
var fieldDef = modelDef.GetFieldDefinition(nameof(FooBar.BarFoo));

var tableName = dialect.GetQuotedTableName(modelDef);
var columnName = dialect.GetQuotedColumnName(modelDef,fieldDef);