Как установить SQLite COLLATE NOCASE colum, используя linq2db с CreateTable? - PullRequest
0 голосов
/ 05 февраля 2019

Пожалуйста, помогите мне, как установить параметры сортировки столбцов, если таблица создается из определения класса с использованием linq2db?Я использую linq2db 2.6.3 для получения данных из локальной базы данных приложения SQLite

В приложении есть режим работы, который создает базу данных, если она не существует.

Похоже, что Code first подход и БД построены с использованием расширения DataConnection.CreateTable

void CreateTableIfNotExists<TDto>(DataConnection conn)
{
    var sp = conn.DataProvider.GetSchemaProvider();
    var dbSchema = sp.GetSchema(conn);
    var tableName = typeof(TDto).Name;
    if (!dbSchema.Tables.Any(t => t.TypeName == tableName))
    {
        //no required table-create it
        conn.CreateTable<TDto>();
    }
}

По умолчанию SQLite имеет чувствительную к регистру сортировку столбцов для текстовых столбцов.

IЯ хотел бы создать текстовые столбцы с COLLATE NOCASE, как

create table Test (
Name nvachar(255) null COLLATE NOCASE
)

Единственный способ найти это - установить формат столбца и добавить COLLATE NOCASE к строке формата, как показано ниже

// modified class from linq2db SQLiteTests.cs 
[Table(Name = "CreateTableTest", Schema = "IgnoreSchema")]
public class CreateTableTest
{
    [PrimaryKey, Identity]
    public int Id;
    [Column(CreateFormat = "{0} {1} {2} {3} COLLATE NOCASE")]
    public string Name;
}

Работает, но есть ли более удобный способ добиться того же?

...