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 项目上跟踪这个功能