我正在研究一个使用实体框架且代码优先的现有项目。在迁移运行之前,我需要运行一些SQL,但是遇到有关外键约束的错误,因此,我需要从表中删除现有数据。我可以不使用DbMigration.DropTable()删除表而这样做吗?
答案 0 :(得分:0)
您不能截断用外键约束引用的表。
您唯一的选择是使用DELETE FROM
从其他表未引用的表开始手动截断数据。相当于EF的类似
db.TableToTruncate.RemoveRange(db.TableToTruncate);
答案 1 :(得分:0)
我想我已经找到了:
Sql("Truncate table dbo.MyTable");
谢谢您的帮助。
答案 2 :(得分:0)
在生产环境中的某些情况下,您没有填充脚本,并且需要表的内容。在这种情况下,您可以使用DbMigration.DropForeignKey和DbMigration.AddForeignKey函数或创建MyTableCopy表,运行SQL并将MyTable的内容插入到新表中。之后,在新迁移中,您可以删除原始表并重命名新表。
答案 3 :(得分:0)
我有一个类似的问题,但我通过将sql手动添加到MigrationBuilder来解决了。万一这可以节省别人几分钟的搜索时间...
migrationBuilder.Operations.Add(new SqlOperation
{
Sql = "delete from WhateverTable"
});