我正在尝试使用视图模型更新数据条目,但收到此错误 msg :
存储更新、插入或删除语句受意外影响 行数 (0)。此后,实体可能已被修改或删除 实体已加载。
据我了解,它显示 ID 丢失,但是在调试中我可以 c 外部 id ( model.rgrade.SubjectId
) 我无法找出如何在结果中找到模型 rgradeId(
这是我的代码:
//checked if the subject name is allready in the db
var subjectNameQuery = db.Subject.Where(n => n.SubjectName.ToLower().Equals(model.sub.SubjectName));
if (subjectNameQuery.Count() > 0)
{
//if the name is in the table, do Not add the name of the Id again
model.rev.SubjectId = subjectNameQuery.SingleOrDefault().SubjectId;
model.rgrade.SubjectId = subjectNameQuery.SingleOrDefault().SubjectId;
if (model.rev.GBU == "Good")
{
model.rgrade.Good = +1;
}
else if (model.rev.GBU == "Bad")
{
model.rgrade.bad = +1;
}
else if (model.rev.GBU == "Ugly")
{
model.rgrade.Ugly = +1;
}
db.Entry(model.rgrade).State = EntityState.Modified;
}
您不需要设置模型的状态。 另外 - 当您知道集合中至少有一个实体时,您不需要使用 SingleOrDefault
。
另外 - 你的意思是使用= +1
吗? 这会将值设置为 1,而不是递增它。 如果是这样,它通常写= 1
.
如果您确实想增加它,则应使用 += 1
.
这是我的写法:
// Check if the subject name is already in the db.
var subjects = db.Subject.Where(s => s.SubjectName.Equals(model.sub.SubjectName, StringComparison.CurrentCultureIgnoreCase));
// If the name is in the table, do not add the name of the Id again.
if (subjects.Any())
{
return;
}
var subjectId = subjects.First().Id;
model.rev.SubjectId = subjectId;
model.rgrade.SubjectId = subjectId;
if (model.rev.GBU == "Good")
{
model.rgrade.Good = += 1;
}
else if (model.rev.GBU == "Bad")
{
model.rgrade.bad = += 1;
}
else if (model.rev.GBU == "Ugly")
{
model.rgrade.Ugly += 1;
}
// Save the entity (no need to set the state).