MVC4 实体框架一个列未更新
本文关键字:一个 更新 实体 框架 MVC4 | 更新日期: 2023-09-27 18:32:07
我遇到了一个令人愤怒的问题,即我的实体中的一个页面列将无法保存/更新。 我已经尝试了许多更新行的方法,例如将我要更新的每个属性分配给我现在的位置(请参阅下面的代码块)。 2 列按预期更新并保存(absent_type_id和point_value),但是无论我做什么,"描述"列都不会保存。
我已经检查了调试器以查看 db 之前的值是什么。保存更改();并确认它已设置为新值;但是,选择保存后的行(并检查数据库)显示"其他"值已更新,但说明恢复为原来的状态...为什么会这样?
[HttpPost]
public JsonResult UpdateOccurrence(int occ_id,
string absent_type,
string description,
int point_value)
{
try
{
// Get id for the absent type
int absent_type_id = db.AT_absent_types.Single(a => a.absent_type == absent_type).absent_type_id;
var occurrenceToUpdate = new AT_occurrences
{
occ_id = occ_id,
absent_type_id = absent_type_id,
description = description,
point_value = point_value
};
db.AT_occurrences.Attach(occurrenceToUpdate);
db.SaveChanges();
//return call omitted
}
catch (Exception ex)
{
return Json(new {Result = "ERROR", Message = ex.Message});
}
}
正如我提到的 - 发布point_value并absent_type完美地保存和更新实体,描述不会保存! 我不知道为什么。 任何帮助或见解将不胜感激 - 这让我发疯! 干杯!
这可能不是您要查找的答案,但是每当我在使用 EF 时遇到类似的问题时,我都会完全删除该表,然后生成。 如果你使用的是 TFS,则如果这不起作用,你始终可以撤消挂起的更改,这是我为自己执行此操作时使用的警告。
使用"附加"将断开连接的属性附加到上下文。我的理解是实体框架无法知道您要更改的属性与数据库中的属性不同。因此,必须显式告知 EF 你已更改属性。喜欢这个:
db.Entry(occurenceToUpdate).Property(o=>o.occ_id).IsModified = true;
或者像这样:
db.Entry(occurenceToUpdate).Property("occ_id").IsModified = true;
您必须对要设置的每个属性重复此操作。
我肯定知道上述工作,但您也可以尝试以下方法。如果要设置实体对象的所有属性,请检查如下所示的内容是否有效:
db.Entry(occurenceToUpdate).State = EntityState.Modified.