c# - 如何使用 entitystate.modified 更新外键?

标签 c# asp.net-mvc-3 entity-framework

我是 MVC3 的新手,我试图在编辑内容两个外键(BRANCH_ID、ITEM_MASTER_ID)后执行更新功能。
当 branch_id 或 Item_master_id 未更改时,我面临的问题很容易,行得到更新,但如果外键更改,它会抛出一个错误:

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.

这是我的模型

public partial class MATERIAL
{
    public int ID { get; set; }
    public int ITEM_MASTER_ID { get; set; }
    public int BRANCH_MASTER_ID { get; set; }
    public string NAME { get; set; }
    public string ADDRESS_DETAILS { get; set; }

    public virtual BRANCH_MASTER BRANCH_MASTER { get; set; }
    public virtual ITEM_MASTER ITEM_MASTER { get; set; }
}

我的编辑功能代码

[HttpPost]
public ActionResult Edit(MATERIAL material)
{
    if (ModelState.IsValid)
    {
        db.Entry(material).State = EntityState.Modified;
        db.SaveChanges();
        int tempid = material.ID;
        return RedirectToAction("listcontinue", new { id = tempid });

    }
    return View(material);
}

帮助我执行更新,即使我的外键被更改。

这是我改进的编辑代码

public ActionResult Edit(MATERIAL material)
    {
       var temp = Convert.ToString(material.ITEM_NAME);

        using (var context = new material_managementEntities())
        {
            var temp1 = (from cs in context.ITEM_MASTER
                         where cs.ITEM_NAME == temp
                         select cs.ID).FirstOrDefault();
            material.ITEM_MASTER_ID = temp1;
        }

        var temp2 = Convert.ToString(material.ITEMGROUP);

        using (var context = new material_managementEntities())
        {
            var temp3 = (from cs in context.ITEM_GROUP_MASTER
                         where cs.ITEM_GROUP_NAME == temp2
                         select cs.ID).FirstOrDefault();
            material.ITEM_MASTER_ITEM_GROUP_MASTER_ID = temp3;
        }

        if (ModelState.IsValid)
        {
            db.MATERIALs.Attach(material);
            db.Entry(material).State = EntityState.Modified;
            db.SaveChanges();
            int tempid = material.ID;
            return RedirectToAction("listcontinue", new { id = tempid });

        }         
       return View(material);
    }

最佳答案

我想你忘记附加对象了:

db.Materials.Attach(material);
db.Entry(material).State = EntityState.Modified;
db.SaveChanges();

关于c# - 如何使用 entitystate.modified 更新外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23490510/

相关文章:

c# - 发送 html 电子邮件时,内联 css 样式未正确应用

c# - EntityDataSource 在回发后丢失 WHERE 语句

asp.net-mvc - 处理ASP.NET MVC系统错误的正确方法

asp.net-mvc - MVC Ajax.BeginForm 插入模式

entity-framework - Windows Azure 发布配置文件不更新数据库

c# - 在目录中创建应用程序快捷方式

c# - Entity Framework 并发

c# - 通过 Html.ActionLink 将输入参数传递给 Controller ​​方法

entity-framework - 使用 Active Directory 集成身份验证的 Azure SQL 数据库连接无法打开

c# - 如何在单个项目中使用 2 个不同的连接字符串?