我使用EntityFrameworkCore.Sqlite
,并且希望使用Migration一切正常,但是当我要删除列时,无法更新数据库。我知道Sqlite
有局限性。
这是我处理此问题的方法:
1。创建新表
2.将旧表数据插入到新表中
3.删除oldTable
4.将新表重命名为oldtable
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(name: "XSettings",
columns: table => new
{
Id = table.Column<int>(nullable: false)
.Annotation("Sqlite:Autoincrement", true),
Name = table.Column<string>(nullable: true),
LName = table.Column<string>(nullable: true)
},
constraints: table =>
{
table.PrimaryKey("PK_Settings", x => x.Id);
});
migrationBuilder.Sql("ALTER TABLE Settings DROP COLUMN HName;");
migrationBuilder.Sql("INSERT INTO XSettings * FROM Settings;");
migrationBuilder.DropTable(name: "Settings");
migrationBuilder.Sql("ALTER TABLE XSettings RENAME TO Settings;");
}
但是当我运行我的应用程序时,HName列仍然存在,那么如何删除列?
答案 0 :(得分:0)
要执行放置列操作,由于SQLite的限制,您必须提供行SQL代码。 Microsoft Docs: SQLite Limitations
从SQLiteStudio网站下载SQLiteStudio
加载本地数据库文件
migrationBuilder.Sql("...");
语句,也可以将其拆分为多个语句复制到C#时只需注意