2

我遇到了一个令人愤怒的问题,我的实体中的一个特定列将无法保存/更新。我尝试了许多更新行的方法,例如手动将我要更新的每个属性分配到我现在所在的位置(请参见下面的代码块)。2 列按预期更新和保存(absent_type_id 和 point_value)但是无论我做什么,“描述”列都不会保存。

我检查了调试器以查看 db.SaveChanges(); 之前的值是多少 并确认将其设置为新值;但是,选择保存后的行(并检查数据库)显示其他值已更新,但描述恢复到原来的状态......为什么会这样?

[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 完美地保存和更新实体,描述只是不会保存!我不知道为什么。任何帮助或见解将不胜感激 - 这让我发疯!干杯!

4

2 回答 2

0

您使用“附加”将断开连接的属性附加到上下文。我的理解是实体框架无法知道您正在更改的属性与数据库中的属性不同。所以你必须明确告诉 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.
于 2013-09-19T22:08:45.737 回答
0

这可能不是您要寻找的答案,但每当我遇到与 EF 类似的问题时,我都会完全删除该表,然后构建。如果您使用的是 TFS,如果这不起作用,您始终可以撤消待处理的更改,这是我为自己执行此操作时使用的警告。

于 2013-09-21T06:09:53.787 回答