如何使用 MigrationBuilder DeleteData 在迁移过程中删除所有行?

问题描述 投票:0回答:2

文档不是很有帮助——只是一个函数签名列表,其中最简单的是:

public virtualOperationBuilderDeleteData(字符串表,字符串keyColumn,对象keyValue,字符串模式= null);

我相当确定我可以计算出表、keyColumn 和 schema 中的内容,但是如果我想删除所有行,我应该在 keyValue 中放入什么值?

.net-core entity-framework-core entity-framework-migrations
2个回答
42
投票

DeleteData 操作看起来并不旨在允许删除表操作中的所有内容。 EF 使用 keyColumn 和 keyValue 来确定要删除的内容,即 keyColumn = keyValue。我建议使用这样的东西:

migrationBuilder.Sql("DELETE FROM [table]", true);

https://github.com/dotnet/efcore/blob/main/src/EFCore.Relational/Migrations/Operations/DeleteDataOperation.cs

https://github.com/dotnet/efcore/blob/main/src/EFCore.Relational/Migrations/MigrationBuilder.cs(大约第1400行)


0
投票

这是一篇旧文章,但我同意文档中的示例会更有帮助。以下是我删除多行而无需大量重复语句的方法:

var keyValues = new Object[] {

    new Guid("3DED1B8E-88D7-4C4E-9A02-3C11FF210EA9"),
    new Guid("E0DFFCFB-6479-49BA-BCEE-13243A95FAC8"),
    new Guid("D953AC1E-674B-4EA9-9C1F-572B454133ED"),
    new Guid("06ad3c30-2b01-473c-8617-9966fae63739"),
}; 
migrationBuilder.DeleteData(
    table: "ValidOperationTypes",
    keyColumn: "Id",
    keyColumnType: "Guid",
    keyValues: keyValues);
© www.soinside.com 2019 - 2024. All rights reserved.