2016-09-23 49 views
2

我已經在本地修改了一個對象,然後將它傳遞給DAL以在連接的數據庫上進行更新。如何使用dbcontext SaveChanges將修改的記錄推送到數據庫?

通常我會使用存儲過程並執行讀取器來更新數據庫,但是此項目實現db數據庫上下文。

但是,當我運行該方法來保存更改時,它將返回沒有錯誤,並且記錄不會更新數據庫上。

在這裏做一個搜索我遇到了this question建議在調用保存之前將db記錄標記爲修改狀態。哪個沒有解決問題。

問:

你怎麼可以把修改的記錄到數據庫使用的DbContext的SaveChanges?

這是DAL方法的要點:

public void update_Release_Status(Status recordModified) 
{ 

      //Get the original record and update with the modified values. 

     Status recordOriginal = db3.Status .First(i => i.ID == recordModified.ID); 
     db3.Entry(recordOriginal).State = System.Data.Entity.EntityState.Modified; //marked as modified here before saving 
     recordOriginal = recordModified; 
     db3.SaveChanges(); 


} 
+0

你從來沒有真正改變'recordOriginal'實例上的任何東西,所以沒有什麼可以更新的。你可以在'recordOriginal'上設置單個字段,而不是完全替換變量引用?或者,如果最初來自數據庫上下文,您可以將'recordModified'附加到上下文中? (它從哪裏來的?) – David

+0

這個解決方案適合你還是什麼? http://stackoverflow.com/a/39663331/1077309 – Sampath

回答

4

你的實體是connected(或tracked)one.So你不需要做這樣db3.Entry(recordOriginal).State = System.Data.Entity.EntityState.Modified;

注意:您必須將傳入對象的屬性映射到提取的對象。您可以使用Mapper API或手動執行此操作,如下所示。

public void update_Release_Status(Status recordModified) 
{ 

    Status recordOriginal = db3.Status.First(i => i.ID == recordModified.ID); 

    recordOriginal.Name = recordModified.Name;//here you have to do the mapping 
    recordOriginal.Age=recordModified.Age; //just used fake property names :) 

    db3.SaveChanges(); 

} 
+0

這不會有完全相同的問題?從數據庫上下文中獲取的實際對象從不修改。沒有保存更改。 – David

+0

這是修改部分'recordOriginal = recordModified;'。它來自他的方法。@ David – Sampath

+0

是的,但是根據數據庫上下文連接'recordModified'?遇到的問題意味着它不是。如果是這樣,爲什麼要取一個單獨的實例呢?基本上,你從數據庫上下文中獲取一個對象,然後從不做任何事情。那爲什麼要拿它呢?您在這裏顯示的整個方法可以簡化爲只是最後一行。 – David

相關問題