[英]How can I delete records in Entity Framework using ExecuteSqlCommand?
[英]How can I efficiently delete all records in a table using Entity Framework without using SQL?
我需要使用實體框架中的 DbContext 刪除給定表中的所有記錄。 我需要它是可移植的,所以它不能依賴 SQL 語句或存儲過程。 我已經查看了這個問題的答案,但由於各種原因,它們都不符合我的要求或者是理想的解決方案。
我可以使用 RemoveRange 方法,即
DbContext.Table.RemoveRange(all);
但這並不能很好地擴展,因為它會在刪除之前選擇所有條目,這對於實體框架可能需要很長時間。 遍歷每條記錄並使用 Remove(record) 單獨刪除它們具有相同的問題。
使用 SQL 這很簡單,使用 TRUNCATE 命令。 即使是一個簡單的 DELETE FROM [TableName] 命令也可以,但我不知道它的可擴展性如何。
有沒有只使用實體框架(無 SQL)的解決方案,並且不需要在刪除它們之前先選擇所有記錄?
這是目前使用實體框架無法實現的。 見https://github.com/dotnet/efcore/issues/795
可能有一個擴展可以讓你這樣做,但我不確定它是否適用於所有 RDBMS 系統。
假設您有 BrandData 表,其中包含一些品牌的記錄:
public class BrandData
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
}
您還創建了一個 dbcontext:
public class MyDbContext : DbContext
{
public MyDbContext(DbContextOptions<MyDbContext> options) : base(options)
{
Database.Migrate();
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<BrandData>().HasData(new BrandData { Id = 999, Name = "LG", Description = "TV brand" });
}
public DbSet<BrandData> BrandData { get; set; }
}
最后,這是通過 ID 刪除品牌的方法:
public async Task DeleteModelAsync(int id)
{
var data = _dbContext.ModelData.FirstOrDefault(b => b.Id == id);
if (data != null)
{
_dbContext.ModelData.Remove(data);
await _dbContext.SaveChangesAsync();
}
}
更改將在 SaveChangesAsync() 方法運行后完成。
更新
要刪除所有記錄:
var brands = await _dbContext.BrandData.ToListAsync();
foreach(var brand in brands)
{
_dbContext.BrandData.Remove(brand);
}
await _dbContext.SaveChangesAsync();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.