簡體   English   中英

無法在實體框架中更新對象

[英]Can't update object in Entity Framework

我正在嘗試通過ASP.NET MVC 5應用程序中的EF 6更新表。

我沒有收到任何錯誤消息或異常,但沒有任何內容保存到數據庫中。 我懷疑該對象不是IQueryable ,因此無法被EF跟蹤(如果我的理解正確的話)。

public async Task Work(Plan newPlan)
{
    var existingPlan = await this._planQuery.GetPlan(112);

    if (existingPlan != null)
    {
        await this._planCommand.UpdatePlan(newPlan, existingPlan))
    }
}

兩種相關的方法是

internal async Task<Plan> GetPlan(int id)
{
    return await base.DataContext.Plans.SingleAsync(a => a.Id == id);
}

internal async Task<bool> UpdatePlan(Plan newPlan, Plan existingPlan)
{
    existingPlan.LastEditDate = DateTime.Now;
    existingPlan.PlanName = newPlan.PlanName;
    existingPlan.Website = newlan.Website;

    if (!await base.SaveToDatabase())
        return false;

     return true;
}

這就是我正在做的事情,如果我理解正確的話,我的期望是:

  1. 接收具有各種屬性值的對象。 這需要更新現有的數據庫條目,當前用112進行硬編碼(僅用於測試)

  2. 查看ID為112的計划是否存在(確實存在)。 我們將其命名為existingPlan 我希望EF能夠跟蹤對此的任何更新

  3. 由於該計划存在,請調用UpdatePlan ,以提供newPlanexistingPlan

  4. 將相關的新值從新newPlan “映射”到existingPlan

  5. 由於EF應該跟蹤現有計划(現已更新),因此只需保存

我在這里想念什么?

我注意到的檢索Plan實例通過發生_planQuery對象,而通過發生更新_planCommand對象。
這些可能不會共享相同的DbContext實例。 如果是這種情況,則在執行更新的DbContext不會跟蹤Plan實例,因此不會執行更新語句。

要解決,請確保通過相同的DbContext實例進行檢索和更新。

暫無
暫無

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

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