实体框架更新和插入问题-ASP.NET MVC

时间:2011-06-21 17:02:16

标签: asp.net-mvc entity-framework

我有以下内容:


public void SaveChanges(Project project, int ParentId)
        {
//If not updating then insert
if (!UpdateMode)
            {
                //Insert New Project Else Simply Save Context Changes
                this.Context.Projects.Add(project);    
            }
//save all changes
            this.Context.SaveChanges();
}

我的想法是,如果我处于插入模式,请添加一个新项目,否则我处于更新模式,我只需要保存所有更改。我传入的项目具有在网页中进行的更改但不会保存。不应该做以下工作吗?

public void SaveChanges(Project project, int ParentId)

2 个答案:

答案 0 :(得分:1)

来自已发布表单的项目未附加到您的对象上下文。您需要将其附加到上下文中。

public void SaveChanges(Project project, int ParentId)        {
    //If not updating then insert
    if (!UpdateMode)            {                
        //Insert New Project Else Simply Save Context Changes                
        this.Context.Projects.Add(project);                
    } else {
        this.Context.Attach(project);
        this.Context.ObjectStateManager.ChangeObjectState(project, EntityState.Modified);
    }
    //save all changes            
    this.Context.SaveChanges();
}

答案 1 :(得分:0)

您的Project对象(如果是更新而不是插入)必须从您调用SaveChanges的相同数据上下文对象加载。如果从一个库中的上下文加载Project,并传递Project,则更新将失败。这是EF / Linq-To-Sql的一个较粘的部分。

查看“附加”方法将现有实体附加到不同的数据上下文,但要注意,据我所知,没有灵丹妙药。 (我自己一直在寻找)