代码之家  ›  专栏  ›  技术社区  ›  oleksa

如何使用带有CreateTable的linq2db设置SQLite COLLATE NOCASE列?

  •  0
  • oleksa  · 技术社区  · 7 年前

    如果表是使用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对文本列具有区分大小写的列排序规则。

    我想用 COLLATE NOCASE 喜欢

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

    我找到的唯一方法是设置列格式和附加 整理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;
    }
    

    这是可行的,但有没有更方便的方法来实现同样的目标?

    0 回复  |  直到 7 年前
    推荐文章