首页 > 解决方案 > 使用 C# 从具有实体框架函数的表中删除所有行

问题描述

我想从我的 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。

如果有人可以帮助我将非常感激:)

标签: c#asp.netsql-serverentity-framework

解决方案


原始 SQL 是执行此类批量更改的首选方法。但最好的方法是获取所有 ID 并构造“存根实体”实例,其中仅填充 ID。

例如

var toDelete = db.Alerts.Select(a => new Alert { Id = a.Id }).ToList();
db.Alerts.RemoveRange(toDelete);
db.SaveChanges();

推荐阅读