因此,假设我有一个将列表属性UserContext.ServicesList
传递给控制器的视图。用户可能已经有一个现有列表,我们希望将更改的记录更新到该列表。最佳方法是什么:
1)删除从列表中删除的记录?
2)更新现有记录?
3)添加新记录?
谢谢!
示例类:
public class UserPage
{
[Key]
public string Id { get; set; }
[ForeignKey("Id")]
public ApplicationUser User { get; set; }
[DataType(DataType.MultilineText)]
public string AboutMe { get; set; }
[DataType(DataType.MultilineText)]
public string AvailableTime { get; set; }
public List<Services> ServicesList { get; set; }
}
public class Services
{
[Key]
public int ServiceId { get; set; }
public string Id { get; set; }
[ForeignKey("Id")]
public ApplicationUser User { get; set; }
public string ServiceName { get; set; }
}
示例控制器:
[HttpPost]
public ActionResult Edit(UserPage UserContext)
{
if (ModelState.IsValid)
{
if (UserContext.ServicesList != null)
{
foreach (var item in UserContext.ServicesList)
{
// What do I do here?
}
}
db.Entry(UserContext).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(UserContext);
}
答案 0 :(得分:0)
您不需要更新现有记录。所以,您只需删除已删除的一个&amp;添加新内容。
foreach (var item in UserContext.ServicesList)
{
if(item.ServiceId == exists)
{
//Check the values & Update if needed else leave
}
else
{
//Remove or Add
}
}
答案 1 :(得分:0)
我会删除ServiceList
的所有记录,然后重新添加来自表单帖子的记录,如
[HttpPost]
public ActionResult Edit(UserPage UserContext,int id)
{
if (ModelState.IsValid)
{
if (UserContext.ServicesList != null)
{
var dbList = db.Services.Where(x=>x.User.Id == id);
foreach(var item in dbList){
db.Services.Remove(item)
}
foreach (var item in UserContext.ServicesList)
{
db.Services.Add(item);
}
}
db.Entry(UserContext).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(UserContext);
}
它只是让事情变得简单。否则,您必须每次比较,删除了多少记录,新的记录数量和新记录数量。简单易行的方法是删除旧列表并重新添加。我不仅在EF中,而且在普通的ADO.Net
中都观察到了这种模式