【问题标题】:SQL adding new record on updateSQL在更新时添加新记录
【发布时间】:2015-03-07 07:38:32
【问题描述】:

我有一个 MVC5 EF6.1 应用程序,除了编辑记录之外,它在各个方面都按照我想要的方式工作。

我正在使用视图模型来处理创建和编辑表单。视图模型与实体模型相匹配,只是它不包含 Id,并且它具有一些用于处理文件上传的额外属性。

创建记录完美无缺。编辑表单按照应有的方式填充字段。更新时,会识别更改。

问题在于,不是更新记录,而是将反映更改的新记录添加到数据库中。应该更新的记录还在。

我已尽我所能尝试解决此问题。我尝试过使用和不使用 EntityState 进行更新。我尝试设置 OriginalValues 和 CurrentValues。我什至尝试过使用原始 SQL 语句。所有结果都相同:添加了一条新数据的记录,而原始数据保持不变。

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(int id, MyViewModel model)
    {
        var thisRecord = db.MyEntity.Find(id);
        //some stuff to update thisRecord properties
        db.SaveChanges();
    }

这一切都很好。我能做些什么来改变我正在制作的唱片而不是制作新唱片? 任何帮助将不胜感激。这让我发疯了。

【问题讨论】:

    标签: sql sql-server entity-framework model-view-controller sql-update


    【解决方案1】:

    试试这个:

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(int id, MyViewModel model)
    {
        var thisRecord = db.MyEntity.Find(id);
        thisRecord.SomeProperty = newValue;
    
        // UPDATE: Try adding this line:
        _db.Entry(thisRecord).State = EntityState.Modified;
        db.SaveChanges();
    
        // Whatever other processing you're doing
    }
    

    【讨论】:

    • 谢谢,XIVSolutions,但我确实尝试过。我还尝试取消防伪验证。结果相同。还有其他想法吗?
    • 见上面的更新行。不确定你是否需要那个。如果还不行,我建议在调试器中单步执行并检查记录中的值以及模型中的值,以便更好地了解正在发生的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 1970-01-01
    相关资源
    最近更新 更多