[英]DataGridView is editable but does not send changes back to database using Entity Framework
[英]Entity Framework does not commit changes to database
這真的很奇怪。 我正在嘗試一件簡單的事情,我正在尋找一個實體,更改該實體的字段,然后將更改提交到數據庫:
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
狀態,並且看到了我的Member
實體處於Modified
狀態。 當我在監視窗口中的ChangeTracker中打開Member
實體時,由於某種原因,這使代碼在我恢復時可以正常工作,並且相應地更新了數據庫。
長話短說: SaveChanges
不會將更改提交到數據庫。 但是,如果我在保存更改中設置了一個斷點,請在監視窗口中查看changetracker,然后打開修改后的實體(在我的示例中為Member
),然后繼續工作就可以了!
那么,當您在監視窗口中的changetracker中查看導致代碼正常工作的實體時,會發生什么情況? 我在這里不知所措,非常感謝您的幫助。 提前致謝。
我已經知道是什么了。 POCO成員具有以下字段:
[必需]公共虛擬帳戶
必填的延遲加載字段。 它吐出了一個驗證錯誤,因為當我在監視窗口中打開實體時,它認為沒有帳戶,但是,這迫使強制執行惰性加載,從而加載了帳戶。 我已經取消了[必需],現在它可以工作了。
現在找出為什么我最初沒有看到驗證錯誤的原因:/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.