gpt4 book ai didi

linq - Entity Framework dbset 最有效的删除方式

转载 作者:行者123 更新时间:2023-12-04 02:07:58 37 4
gpt4 key购买 nike

我有以下内容并正在寻找一种更有效的方法来删除与循环遍历记录然后一次删除每个记录(注意使用 Dbset):

     var wcd = dbContext.ProgramDetails.Where(p => p.Id == Id);

foreach (var wc in wcd.ToList())
{
dbContext.ProgramDetails.Remove(wc);
}

dbContext.SaveChanges();

还要说我们是否有 1 条记录,如下所示:
    var pg = dbContext.Program.Where(p => p.Id == Id && Name == FName);

删除此记录的最佳方法是什么?

尝试了以下但给出了错误:
    var pg = dbContext.Program.Where(p => p.Id == Id && Name == FName);
dbContext.Program.Remove(wc);

然后我使用 foreach 来只删除一条记录,正如我上面所展示的那样,这对于仅 1 条记录来说并不是最有效的。

最佳答案

EF7 更新 :

using (var db = new BloggingContext())
{
var blog = db.Blogs.First(p => p.Id == Id);
db.Remove(blog);
db.SaveChanges();
}

2015 年 5 月更新 :检查更新的文档 msdnexamples .使用 EF6 删除实体的示例代码:
 public async Task<ActionResult> Delete(Department department) 
{
try
{
db.Entry(department).State = EntityState.Deleted;
await db.SaveChangesAsync();
return RedirectToAction("Index");
}
catch (DbUpdateConcurrencyException)
{
return RedirectToAction("Delete", new { concurrencyError = true, id = department.DepartmentID });
}
catch (DataException /* dex */)
{
//Log the error (uncomment dex variable name after DataException and add a line here to write a log.
ModelState.AddModelError(string.Empty, "Unable to delete. Try again, and if the problem persists contact your system administrator.");
return View(department);
}
}

如果您知道 ID 并且没有加载实体,最有效的方法是创建假实体并将其删除
var p = new Program  { Id = myId } 
dbContext.Program.Remove(p)

但是,如果您确实有多个具有相同 ID 的记录并且您需要使用 name,这将不起作用。字段以及选择正确的一个。

你的最后一个例子也应该是
var pg = dbContext.Program.First(p => p.Id == Id && p.Name == FName);
dbContext.Program.Remove(pg);

关于linq - Entity Framework dbset 最有效的删除方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12831122/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com