簡體   English   中英

實體框架數據庫更改未在DbContext中看到

[英]Entity Framework database changes not seen in the DbContext

我有一個連接到數據庫的簡單應用程序(實體框架,代碼優先)。 我有一個用於更新數據庫條目的屏幕。 我可以使用以下代碼更新數據庫:

public void UpdatePlayer()
{
    Player playerInDb = GetPlayerFromDb(_player.Id);

    playerInDb.Name = Name;
    playerInDb.Score = Score;

    _context.SaveChanges();
    TryClose();
}

private Player GetPlayerFromDb(int id)
{
    return _context.Players.Single(p => p.Id == id);
}

如果在調用SaveChanges之后立即刷新數據庫,則可以看到實際數據庫中的更改,但是如果查看_context.Players,舊值仍然存在。 只有在我關閉我的應用程序並重新打開它之后,更改才會出現在DbContext中。 如何在調用SaveChanges之后確保來自數據庫的更新數據出現在DbContext上?

更新:

我將代碼更改為以下內容:

    public void UpdatePlayer()
    {
        Player playerInDb = GetPlayerFromDb(_player.Id);

        playerInDb.Name = Name;
        playerInDb.Score = Score;

        using (var context = new ApplicationDbContext())
        {
            context.Players.Attach(playerInDb);
            context.Entry(playerInDb).State = EntityState.Modified;
            context.SaveChanges();
        }
        TryClose();
    }

我仍然有同樣的問題。 該記錄在數據庫中更新,但在應用程序中未更新,因此我的UI不會使用新數據進行更新。 即使我從數據庫重新加載了整個播放器集合,也沒有任何更新,直到我完全重新啟動該應用程序為止。

您將需要一個額外的步驟來修改對象:

_context.Players.Attach(playerInDb);

var entry = _context.Entry(playerInDb);
entry.State = EntityState.Modified;

_context.SaveChanges();   

另外,您可能需要檢查以下詳細信息:
-https://msdn.microsoft.com/zh-CN/library/jj592676(v=vs.113).aspx
- 實體框架5更新記錄
- 如何使用Entity Framework 6更新記錄?

實體本身具有一種機制,可以在兩次選擇或多次執行選擇等操作時緩存實體,以增加速度。 您可以通過設置來更改實體的狀態。

entity.State = EntityState.Modified;

請考慮使用工作單元概念,而不是在類內部共享相同的dbContext 這將使用以下語法來處理上下文本身:

using(DbContext dbContext = new DbContext())
{
    //Do some stuff, update, delete etc
}

如果您沒有適當地處理上下文,那么最終還會導致應用程序出現其他問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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