[英]updating and deleting record through model binding in asp.net mvc
我从存在父级和子级列表的视图中发布模型对象,并且还要从数据库中获取另一个对象,因此我正在比较像
public bool ChildRecords(CheckListTemplate questList)
{
int templateId = questList.Id;
if (templateId > 0 && questList.Questions.Count() > 0)
{
var template =DBContext.CheckListTemplates.Include(p => p.Questions).SingleOrDefault(p => p.Id == templateId);
template.Name = questList.Name;
List<CheckListQuestion> delQuestions = new List<CheckListQuestion>();
foreach(CheckListQuestion q in template.Questions)
{
var question = questList.Questions.Where(x => x.Id == q.Id).FirstOrDefault();
if (question == null)
{
delQuestions.Add(q);
}
else
{
q.Question = question.Question;
q.Clause = question.Clause;
}
}
if(delQuestions.Count()>0)
{
foreach(CheckListQuestion qst in delQuestions)
{
var itemToRemove = template.Questions.Single(r => r.Id == qst.Id);
template.Questions.Remove(qst);
}
}
DBContext.Entry(template).State = EntityState.Modified;
DBContext.SaveChanges();
}
我正在更新和删除记录。如果我更新记录功能可以正常工作,但是当我删除记录并发布视图时,则DBContext.Entry(template).State = EntityState.Modified; 提供错误。如何删除记录。代码中缺少的内容。
如果您可以与我们分享错误,那就太好了。 但是查看您的代码,可能遇到的错误是因为您试图删除循环中的某些记录,但这是行不通的。
通过仅将要删除的记录的ID存储在内存中,可以简化代码。 例:
public bool ChildRecords(CheckListTemplate questList)
{
int templateId = questList.Id;
if (templateId > 0 && questList.Questions.Count() > 0)
{
var template = DBContext.CheckListTemplates.Include(p => p.Questions).SingleOrDefault(p => p.Id == templateId);
template.Name = questList.Name;
List<int> delQuestions = new List<int>();
foreach(CheckListQuestion q in template.Questions)
{
var question = questList.Questions.Where(x => x.Id == q.Id).FirstOrDefault();
if (question == null)
delQuestions.Add(q.Id);
else
{
q.Question = question.Question;
q.Clause = question.Clause;
}
}
if(delQuestions.Count()>0)
DBContext.CheckListTemplates.RemoveRange(DBContext.CheckListTemplates.Where(x => ids.Contains(x.Id)));
DBContext.Entry(template).State = EntityState.Modified;
DBContext.SaveChanges();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.