【发布时间】:2020-07-04 08:18:48
【问题描述】:
我想从我的 SQL Server 数据库中的表中删除所有行(如屏幕截图所示):
为此,我正在使用以下功能:
private readonly DatabaseContext _context;
[HttpDelete]
public async Task DeleteInstances()
{
_context.Alertings.RemoveRange();
await _context.SaveChangesAsync();
}
在DbContext 我有这个:
public class DatabaseContext : DbContext
{
public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options)
{
}
public DbSet<AlertingDataModel> Alertings { get; set; }
}
而我的AlertingDataModel 是:
[Table("Alerting")]
public class AlertingDataModel
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Instance { get; set; }
public string Serverity { get; set; }
public string Summary { get; set; }
public string State { get; set; }
public string ActiveAt { get; set; }
}
我研究过,我找到了这个方法
context.Database.ExecuteSqlCommand("TRUNCATE TABLE [TableName]");
但我认为这是一种旧方法,我使用的是 ASP.NET Core 3.1.1。
如果有人能帮助我,我将非常感激:)
【问题讨论】:
-
But I think it's an old method← 为什么?根据您想要使用纯 EF 方法清空的表中的记录数可能会很好,但您必须检索记录然后删除它们。如果表可以包含许多记录,则首选 DELETE FROM 或 TRUNCATE TABLE。 -
我觉得直接sql执行不好?这就是我被告知的,我正在寻找一个像@David 给出的函数
-
原始 sql 的性能会更高,但如果表中的记录数有限,这可能根本不重要。您选择的内容应基于您的需求以及您期望表格包含的内容。
-
我将记录很多关于 Alerting 历史的记录,现在我必须创建一个不断调用 Add 方法的后台服务,我想我可能会使用 5 分钟的计时器,我不知道它是否是可选的,我也不知道如何使用这些后台服务,无论如何我会去阅读文档,谢谢你的帮助:)
标签: c# asp.net sql-server entity-framework