2011-07-18 86 views
1

我試圖更新表中的一個字段,之後我在不同的表中添加了一行。 (該值只是顯示該行已被導入)我以爲我在這裏使用了正確的代碼,但bool'Imported'字段沒有更新。下面是相關代碼:使用實體框架更新一行

using (DbContext db = new DbContext()) 
{ 
    db.Details.Add(details); 
    db.SaveChanges(); 
    newID = details.DetailsID; 
    AccessRepository rep = new AccessRepository(); 
    AccessDetails detailUpdate = rep.GetByID(item.AccessDetailsTableID); 
    detailUpdate.Imported = true; 
    db.SaveChanges(); 
} 

第一的SaveChanges調用工作,因爲我想添加一個新行,但沒有第二個。它成功地從存儲庫中檢索數據,但不更新該值。

任何想法,爲什麼它可能不工作?

謝謝

+0

是你的資料庫鏈接到同一個上下文? – Hammerstein

+0

是的,我只在網站上有一個上下文。 –

+1

我想知道爲什麼你在代碼塊裏面已經在處理上下文本身的情況下將存儲庫搞亂了。此外,您在網站上的上下文是什麼意思? –

回答

1

我想這是因爲你的AccessRepository使用不同的數據上下文(DB)的一個範圍(在你的發佈代碼)

你可以嘗試在你的AccessRepository其中做了SaveChanges方法相同但在正確的數據上下文中。

但是,調用兩次保存的問題是您損失了單筆交易的好處。因此,如果要將這兩個更新關聯起來,您應該只調用一次SaveChanges。

我想創建一個Add方法,在你AccessRepository一個保存方法,然後用這樣的事情...

AccessRepository rep = new AccessRepository(); 
rep.Add(details); 
AccessDetails detailUpdate = rep.GetByID(item.AccessDetailsTableID); 
detailUpdate.Imported = true; 
rep.Save();//this calls SaveChanges on a single data context 

希望幫助

+0

是的,這是它 - 謝謝:) –

0

你應該在GetById()方法中使用newId嗎?

using (DbContext db = new DbContext()) 
{ 
    db.Details.Add(details); 
    db.SaveChanges(); 
    newID = details.DetailsID; 
    AccessRepository rep = new AccessRepository(); 
    AccessDetails detailUpdate = rep.GetByID(newID); 
    detailUpdate.Imported = true; 
    db.SaveChanges(); 
} 
+0

否 - 實際上會進一步使用該功能。我實際上應該已經從示例中刪除了它。這個過程處於foreach循環的中間,這就是爲什麼我使用該ID進行更新的原因。 –