2013-11-24 79 views
0

好吧這一個讓我瘋狂!我在這裏做錯了什麼?插入操作的作品,但更新不...預先感謝您!爲什麼這個LINQ不更新?

if (mFromXml.Any()) { 
    using (DBDataContext DB = new DBDataContext()) { 
     foreach (object m_loopVariable in mFromXml) { 
      m = m_loopVariable; 
      XSLive mToDb = new XSLive(); 
      mToDb.Id = m.Id; 
      mToDb.Location = m.Location; 
      XS.XSLive existingMInDb = (from c in DB.XSLive where c.Id == mToDb.Id).FirstOrDefault(); 
      if (existingMInDb != null) { 
       existingMInDb = mToDb; 
      } else { 
       DB.XSLive.InsertOnSubmit(mToDb); 
      } 
     } 
     DB.SubmitChanges(); 
    } 
} 
+5

切勿使用'如果mFromXml.Count()> 0'檢查一個序列包含的元素。這將執行整個查詢(如果它不是集合),只是爲了確定「計數」。而是使用'mFromXml.Any'。 –

+0

@TimSchmelter謝謝Tim! – OrElse

+0

您說'if(existingMInDb!= null){{{{}} {} {}現有MInDb = mToDb; ' - 看起來如果你有什麼東西,你馬上就會忘記它是什麼。 –

回答

1

的問題是,你被引用一個新的對象更換existingMInDb對象。結果是整個existingMInDb變量現在指向mToDb。由Entity Framework跟蹤的舊的現有MInDb對象消失了。

您需要單獨更新existingMInDb對象上的屬性。您需要更改:

if (existingMInDb != null) { 
    existingMInDb = mToDb; 
} 

要:

if (existingMInDb != null) { 
    existingMInDbId.Id = mToDb.Id; 
    existingMInDbId.Location = mToDb.Location; 
} 
相關問題