2013-08-30 44 views
2

我有一個JSON字符串,我把它變成一個EF entitiy。EntityFramework更新具有其他值的實體?

Report result = js.Deserialize<Report>(json); 

我想更新我的上下文中的實體具有相同的ID,以使我的值得到一個。

var reportToUpdate _entities.Reports.Single(x => x.Id == result.Id) 

我想要做這樣的事情

reportToUpdate = set all values to the values from result 
context.SaveChanges(); 

我怎樣才能做到這一點?

我想避免做這樣的事情:

report.param1 = result.param1 
report.param3 = result.param3 
report.param3 = result.param3 

,因爲有這個實體約50性質。

+0

檢查AutoMapper – zsong

回答

8

這應該適合你。

context.Reports.Entry(reportToUpdate).CurrentValues.SetValues(result); 
context.SaveChanges(); 

請注意,SetValues不遵循導航屬性或相關對象,只是實體本身的複雜/簡單屬性。

+0

使用此方法時,請確保將'result'的鍵/ ID設置爲'reportToUpdate'的鍵/ ID。如果'result'有一個Id = 0,那麼它將拋出一個異常。 – OzBob

+0

不應該是context.Entry(reportToUpdate).CurrentValues.SetValues(result);這是上下文跟蹤條目的,而不是DBSets – Brent

1

如果您已經填充實體模型,那麼你只需要做附加實體

嘗試這樣的事情。

_context.Reports.Attach(result); 
_context.Entry(result).State= EntityState.Modified; 

關注此link瞭解更多詳情。

+3

我試過這個,我得到一個錯誤,它已經有一個具有相同的ID。這個從json反序列化的'新'是一個'編輯'到數據庫中的一個。 – Kyle

相關問題