You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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

如何使用MigrationBuilder.DeleteData删除表中所有行?

嘿,刚好碰到过这个问题!你注意到的那个带keyColumnkeyValue的重载其实是用来按主键值删除特定行的,如果你想删掉表中所有数据,根本不需要用这个重载——EF Core其实提供了一个更适合的无key参数版本。

正确的做法:使用无主键参数的DeleteData重载

这个重载的签名是:

public virtual OperationBuilder DeleteData(string table, string schema = null);

它不需要指定任何主键条件,执行后会直接清空目标表的所有行。

代码示例

在你的迁移类的Up方法里这么写就行:

protected override void Up(MigrationBuilder migrationBuilder)
{
    // 例子1:删除指定schema下的表所有行
    migrationBuilder.DeleteData(
        table: "Products",
        schema: "Sales");

    // 例子2:如果表在默认schema(比如SQL Server的dbo),可以省略schema参数
    migrationBuilder.DeleteData(table: "Customers");
}

为什么不能用带key的重载删所有行?

那个最简重载DeleteData(string table, string keyColumn, object keyValue, string schema = null)的设计目的是精准删除匹配特定主键值的单行(主键本身不允许重复,所以一般是单行)。不管你给keyValue传什么值(比如null、默认值),它只会删除符合该主键条件的行,没法做到清空整个表。

所以记住,删全表就用无key的重载,精准删行才用带key的版本~

内容的提问来源于stack exchange,提问作者Rupert Morrish

火山引擎 最新活动