对于那些像我一样通过谷歌搜索并最终来到这里的人,这就是您目前在 EF5 和 EF6 中执行此操作的方式:
context.Database.ExecuteSqlCommand("TRUNCATE TABLE [TableName]");
假设上下文是System.Data.Entity.DbContext
Edit:
目前在net6.0(dotnet 6 core)中您可以执行以下操作:
context.Database.ExecuteSqlRaw("TRUNCATE TABLE [TableName]");
或者使用异步重载:
await context.Database.ExecuteSqlRawAsync("TRUNCATE TABLE [TableName]");
这些是来自的扩展方法Microsoft.EntityFrameworkCore.RelationalDatabaseFacadeExtensions
如果您遇到外键问题(在 MySql 中),您可能需要执行以下操作(执行SET FOREIGN_KEY_CHECKS = 0;
参与单独的通话似乎对我不起作用)
context.Database.ExecuteSqlRaw("SET FOREIGN_KEY_CHECKS = 0; TRUNCATE TABLE [TableName];");
因此,如果您想截断整个数据库(可能出于单元测试的原因) - 您可以执行以下操作:
var tableNames = context.Model.GetEntityTypes()
.Select(t => t.GetTableName())
.Distinct()
.ToList();
foreach (var tableName in tableNames)
{
context.Database.ExecuteSqlRaw($"SET FOREIGN_KEY_CHECKS = 0; TRUNCATE TABLE `{tableName}`;");
}