EF迁移:截断表

时间:2019-06-19 11:07:25

标签: c# entity-framework ef-migrations

我正在研究一个使用实体框架且代码优先的现有项目。在迁移运行之前,我需要运行一些SQL,但是遇到有关外键约束的错误,因此,我需要从表中删除现有数据。我可以不使用DbMigration.DropTable()删除表而这样做吗?

4 个答案:

答案 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"
});