2011-06-21 42 views
0

我有以下幾點:實體框架的更新和插入Issue-ASP.NET MVC


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

你怎麼知道它在updatemode? – David

+0

您需要添加更多信息。例如你沒有說過什麼是錯的。當你運行上面的時候會發生什麼? – OpticalDelusion

回答

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(); 
} 
+0

4.1的語法是什麼? ObjectStateManager似乎不存在。 – Keith

+0

找到了: this.Context.Entry(project).State = System.Data.EntityState.Modified; – Keith

+0

這工作!多謝你們 – Keith

0

你的項目對象(如果它的更新,而不是插入)MUST從你在調用的SaveChanges同一數據上下文對象中加載。如果您從一個庫中的上下文加載項目並傳遞該項目,則更新將失敗。這是EF/Linq-To-Sql的其中一個重要部分。

看看「附加」方法將一個現有的實體附加到不同的數據上下文,但要注意的是,就我所知,沒有神奇的項目符號。 (仍在尋找它自己)