簡體   English   中英

實體框架不將更改提交到數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM