• SQLite EF Core 数据库提供程序局限性
    • 建模限制
    • 迁移的局限性
    • 迁移局限性的解决方案

    SQLite EF Core 数据库提供程序局限性

    SQLite 提供程序有一些迁移限制,其中大部分是底层 SQLite 数据库引擎的限制造成的,并不是 EF 特定的。

    建模限制

    通用的(由 Entity Framework 关系数据库提供程序共享的)关系库提供了建模相关的 API,这对于大部分关系数据库引擎是通用的。其中有几个概念是 SQLite 提供程序不支持的。

    • 模式(Schemas)
    • 序列(Sequences)

    迁移的局限性

    SQLite 数据库引擎不支持一些其他主要的关系数据库支持的模式操作。如果尝试将不被支持的操作应用到 SQLite 数据库,将会抛出 NotSupportedException 异常。

    操作 支持状态
    AddColumn(添加数据列)
    AddForeignKey(添加外键)
    AddPrimaryKey(添加主键)
    AddUniqueConstraint(添加唯一约束)
    AlterColumn(修改数据列)
    CreateIndex(创建索引)
    CreateTable(创建数据表)
    DropColumn(删除数据列)
    DropForeignKey(删除外键)
    DropIndex(删除索引)
    DropPrimaryKey(删除主键)
    DropTable(删除数据表)
    DropUniqueConstraint(删除唯一约束)
    RenameColumn(重命名数据列)
    RenameIndex(重命名索引)
    RenameTable(重命名表名)

    迁移局限性的解决方案

    可以在迁移中手动编写代码来执行数据表重建,这样可以解决一些局限性问题。一个数据表的重建包括重命名已有的数据表、创建新表、复制数据到新表以及删除旧的数据表。这将需要使用 Sql(string) 方法来执行其中一些步骤。

    查看 SQLite 文档中的 其他类型的表模式更改 可以了解更详细的信息。

    未来 EF 可能会通过上述数据表重建的方式来支持其中的一些操作。你可以 在我们的 GitHub 项目上跟踪这个功能。