从 属性 名称获取 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);
假设我有这个 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);