我有以下内容:
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)
答案 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的一个较粘的部分。
查看“附加”方法将现有实体附加到不同的数据上下文,但要注意,据我所知,没有灵丹妙药。 (我自己一直在寻找)