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