Получить имя столбца базы данных OrmLite из имени свойства - PullRequest
2 голосов
/ 14 июля 2020

Допустим, у меня есть этот класс:

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

OrmLite при использовании postgresql создаст имя таблицы foo_bar и столбцы id и bar_foo.

I может получить имя таблицы для использования в пользовательском запросе, например:

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

Если соглашение об именах изменяется или свойство переименовывается, запрос прерывается, потому что столбец bar_foo определен как строка .

Как мне определить имена столбцов таким же образом, как я определяю имена таблиц?

1 Ответ

2 голосов
/ 14 июля 2020

Вы можете получить имена таблиц и столбцов от поставщика диалекта, например:

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

По их имени, где он будет использовать настроенную NamingStrategy:

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

По модели OrmLite & определение поля, в котором также будут использоваться любые настройки РСУБД [Alias], определенные в модели:

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

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