我有一個模型,我們可以稱之爲人爲什麼沒有我不能修改我的模型:具有相同鍵的對象已存在異常
// My table tb_person
public class Person
{
public int Id {get;set;}
public string Name {get; set;}
public int Age {get; set;}
public DateTime AddTime {get; set;}
public DateTime UPdateTime {get;set;}
public string Remark {get; set}
public bool IsEnable {get;set;}
}
首先我得到的Mdoel
using (var ctx = new MyEntitys())
{
ctx.Configuration.ProxyCreationEnabled = false;
ctx.Configuration.LazyLoadingEnabled = false;
Person firstModel = ctx.Persons.Where(x=> x.Id = 5).FirstOrDefault();
}
現在很長一段時間我需要修改模型後,但我需要在數據庫中獲取舊模型並進行比較。
using (var ctx = new MyEntitys())
{
ctx.Configuration.ProxyCreationEnabled = false;
ctx.Configuration.LazyLoadingEnabled = false;
Person CurrentModel = ctx.Persons.Where(x=> x.Id = 5).FirstOrDefault();
// Just a example for judge or compare
if (CurrentModel.IsEnable)
{
if (CurrentModel.UpdateTime != null)
{
firstModel.Update = time;
}
}
else
{
firstModel.AddTime = new DateTime();
}
ctx.Entry(firstModel).State = System.Data.Entity.EntityState.Modified;
ctx.SaveChanges();
}
那麼它會拋出:
我爲什麼不使用CurrentModel
更新?因爲firstModel
我改變這麼多財產,我不想複製所有財產。我只需要從數據庫中獲取一些信息,然後替換它然後保存。
這樣,我不喜歡它。我感到困惑,而且很複雜。
我還用想另一種方式來固定它:
//只是判斷它沒有得到它
if (ctx.Persons.Any(x=> x.Id = 5 && x.UpdateTime != null){
// then do something change after judge
}
Basicly現在我知道問題的根源是:實體框架緩存後的結果得到它 。這就是爲什麼我得到一個新的模型後,它不會讓我使用舊的。
但我仍然在尋找一種更好和更高的性能方式(我只想減少與數據庫的交易)來修復它。 你有什麼想法嗎?
對不起,我還是不明白。語言如此官方。你能用一些簡單的方法或代碼解釋它嗎?謝謝。 – qakmak
是的,但強烈建議閱讀我輸入的有用鏈接Asnwer的更多信息部分:) –
真的很抱歉,我已經看到它了。我不知道什麼是被跟蹤的實體。我也看不到代碼與我的代碼示例有任何關係..... – qakmak