如何在迁移中使用MigrationBuilder DeleteData删除所有数据行?
如何使用MigrationBuilder.DeleteData删除表中所有行?
嘿,刚好碰到过这个问题!你注意到的那个带keyColumn和keyValue的重载其实是用来按主键值删除特定行的,如果你想删掉表中所有数据,根本不需要用这个重载——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




