2013-05-14 53 views
0

我正在使用MVC應用程序。context.SaveChanges()不持久化數據庫中的數據

當我調用context.SaveChanges來更新特定的記錄。更新未在數據庫中註冊。我也沒有得到任何運行時錯誤。所有通知是我的記錄沒有更新。我仍然看到相同的值。插入功能完美地工作。

enter code here 

public Admission Update(int stuid){ 

     VDData.VidyaDaanEntities context = new VDData.VidyaDaanEntities(); 
     VDData.Student_Master studentmaster = new VDData.Student_Master(); 

     studentmaster.Student_ID = stuid; 
     studentmaster.Student_First_Name = this.FirstName; 
     studentmaster.Student_Middle_Name = this.MiddleName; 
     studentmaster.Student_Last_Name = this.LastName; 
     studentmaster.Student_Address_1 = this.Address; 
     studentmaster.Student_Address_2 = this.Address2; 
     studentmaster.Student_City = this.City; 
     studentmaster.Student_State = this.State; 
     studentmaster.Student_Pin_Code = this.Pincode; 

     context.SaveChanges(); // here it wont give any kind of error. it runs sucessfully. } 
+1

你可以提供一些代碼! – Akrem 2013-05-14 11:36:59

+0

在保存更改之前是否更新模型? – Prashant16 2013-05-14 11:40:10

+0

您是否附加了該實體?你可以在這裏找到有用的東西http://msdn.microsoft.com/en-us/data/jj592676.aspx – vmeln 2013-05-14 13:05:24

回答

0

好像要更新,更換context.SaveChanges();所以你的代碼應該是

VDData.Student_Master studentmaster = context.Student_Masters.Single(p=>p.Student_ID == stuid); 

,你不應該改變student_id數據如果是首要的關鍵。

public Admission Update(int stuid){ 

     VDData.VidyaDaanEntities context = new VDData.VidyaDaanEntities(); 
     //VDData.Student_Master studentmaster = new VDData.Student_Master(); 
//REPLACE WITH 
VDData.Student_Master studentmaster = context.Student_Masters.Where(p=>p.Student_ID == stuid); 

     studentmaster.Student_ID = stuid; 
     studentmaster.Student_First_Name = this.FirstName; 
     studentmaster.Student_Middle_Name = this.MiddleName; 
     studentmaster.Student_Last_Name = this.LastName; 
     studentmaster.Student_Address_1 = this.Address; 
     studentmaster.Student_Address_2 = this.Address2; 
     studentmaster.Student_City = this.City; 
     studentmaster.Student_State = this.State; 
     studentmaster.Student_Pin_Code = this.Pincode; 

     context.SaveChanges(); 
+0

VDData.Student_Master studentmaster = context.Student_Masters.Where(p => p.Student_ID == stuid);它給出錯誤錯誤\t無法隱式地將類型'System.Linq.IQueryable '轉換爲'VDData.Student_Master'。存在明確的轉換(是否缺少轉換?)VDModel \ Models \ Admission \ Admission.cs – Harshal 2013-05-15 06:15:43

+0

將Where()更改爲Single()並且它將工作。 – cherhan 2013-05-15 06:21:02

1

首先得到你所要更新的實體:

var entity = obj.GetEntity(id); 
entity.col1 = "value"; 
context.SaveChanges(entity); 

希望這將有助於。

+0

謝謝回覆我。我正在嘗試你的代碼,但它不會工作。 – Harshal 2013-05-15 05:17:13

0

之前

context.SaveChanges(); 

你需要調用這個

context.Student_Masters.Add(studentmaster); 

編輯:介紹AbstractionContext class和你的上下文類象下面創建一個方法,那麼你可以調用它,每當你想創建或更新你的對象。

public void SaveStudent_Master(Student_Master studentmaster) 
    { 
     using (var context = new VDData.VidyaDaanEntities()) 
     { 
      if (studentmaster.Student_ID == 0) 
      { 
       context.Student_Masters.Add(studentmaster); 
      } 
      else if (studentmaster.Student_ID > 0) 
      { 
       //This Updates N-Level deep Object grapgh 
       //This is important for Updates 
       var currentStudent_Master = context.Student_Masters 
        .Single(s => s.Student_ID == studentmaster.Student_ID); 

       context.Entry(currentStudent_Master).CurrentValues.SetValues(studentmaster);     
      } 
      context.SaveChanges(); 
     } 

然後在你的控制器與_context.SaveStudent_Master(studentmaster);

+0

其實我想更新記錄和建議的代碼插入記錄到表中。 – Harshal 2013-05-15 05:34:31

+0

@Harshal是的,我看到現在,你沒有顯示足夠的代碼 – Komengem 2013-05-15 05:36:16