只要基於數據庫中的某個ID存在多於X條記錄,我想要刪除表中的所有記錄。同時刪除並更新數據庫MVC
using(ApplicationDbContext app = new ApplicationDbContext())
{
try
{
var UserImg = app.Images.Where(x => x.UserID == LoggedUserId).Select(s => s.ID).FirstOrDefault();
if (UserImg != null)
{
app.Database.ExecuteSqlCommand("TRUNCATE TABLE [Image] LIMIT 2");
}
else if(UserImg == null)
{
app.Images.Add(img);
}
app.SaveChanges();
return RedirectToAction("Details", "Jobs", new { controller = "JobsController", action = "Details", id = Session["DetailsURL"] });
}
catch (DbEntityValidationException ex)
{
//non-relevant stuff
}
}
關於ExecuteSqlCommand
更精確,我該如何設法保留X記錄?因爲我想一直保留1張圖片UserID
。如果我只是截斷它將每次刪除所有內容,我不知道如何在這裏使用LIMIT
。
基本上我想更新一個新的當前圖像,如果有另一種方法我覺得更開放嘗試。
Solution:
try
{
foreach (var id in app.Images.Where(x => x.UserID == LoggedUserId).Select(e => e.ID))
{
var entity = new Image { ID = id };
app.Images.Attach(entity);
app.Images.Remove(entity);
}
app.Images.Add(img);
app.SaveChanges();
return RedirectToAction("Details", "Jobs", new { controller = "JobsController", action = "Details", id = Session["DetailsURL"] });
}
你好,我得到這個錯誤:實體類型DbQuery'1不是當前上下文模型的一部分。您嘗試使用EntityState刪除。不過,我很久以前就用這個解決方案編輯了我的問題。感謝您的時間和精力。 – Eduard
@Eduard我編輯了一些foreach。這個錯誤是因爲向db.Entry()'db.Entry添加一個集合只接受一個對象,不用於集合/ *對不起,因爲錯誤*/...... 這裏我提到了一些條目狀態爲已刪除,之後我添加了一些(一)entriy(s)。然後我要求EF保存所有更改,意味着當代碼行「db.SaveChanges()」執行時,整個過程將被執行(包括刪除和創建) –