這真的很奇怪。我想要一個簡單的事情,我試圖找到一個實體,改變實體的域,然後提交更改到數據庫:實體框架不會對數據庫提交更改
using (AppDbContext context = new AppDbContext()) {
try {
var member = context.Members.SingleOrDefault(m = m.MembershipNumberId == membershipNo);
var centre = context.Centres.SingleOrDefault(c => c.CentreId == oldCentreId);
if (member != null) {
if (centre != null) {
member.Centre_id = Centre.id;
context.SaveChanges();
}
}
} catch (Exception e) {
HandleError(e);
}
}
所以非常直截了當的東西。但是,由於某些原因沒有對數據庫進行任何更改,實際上,EntityState
仍然是Modified
。
在我看來,事情變得非常奇怪:我在AppDbContext.SaveChanges()
中放置了一個斷點,以便在調試時查看changetracker。
當我這樣做,一切都看起來不錯,我看到我的Centre
實體在Unchanged
狀態,我看到Modified
狀態我Member
實體。當我打開位於監視窗口中ChangeTracker的Member
實體時,出於某種原因,這使得代碼在恢復時可以正常工作,並且相應地更新了數據庫。
長話短說:SaveChanges
不會對數據庫提交更改。但是,如果我在保存更改時放置斷點,請查看監視窗口中的更改跟蹤器,然後打開修改後的實體(在我的示例中爲Member
),然後恢復,它可以工作!
那麼當您在監視窗口中查看導致代碼工作的changetracker中的實體時會發生什麼?我在這裏感到茫然,非常感謝任何幫助。提前致謝。
我只想補充一點,這是一個控制器的動作裏面,如果該事項在所有。 – Dean
而'member'和'centre'都不是'null'? –
在'savechnages'行之前加上。 'context.Entry(member).State = EntityState.Modified;' – Mairaj