如何使用EF Core內部的集合更新分離的對象?

c# entity-framework entity-framework-core

我有一個包含集合的分離對象。我正在使用此代碼附加它

EntityEntry dbEntityEntry = _context.Entry<T>(entity);
dbEntityEntry.State = EntityState.Modified;

如果我改變大多數字段,分離的對象可以完美地保存。問題在於此對象具有的集合。集合的更改不會保留。我已經看到執行的查詢,它onl觸及“主”表。所有依賴關係都不會更新

有沒有辦法更新整個樹的分離對象?

一般承認的答案

問題:

EF不知道更改的collectionnavigation properties 。通過將dbEntityEntry的狀態設置為EntityState.Modified ,EF只知道對象dbEntityEntry已更改。這意味著EF只會更新dbEntityEntry而不會更新它的navigation properties

方案:

您可以迭代當前dbEntityEntry所有collection (or navigation properties) ,並將實體狀態設置為EntityState.Modified

另一個解決方案:請看一下。可能對你有所幫助。

使用自我跟踪實體


熱門答案

我可以建議我在某個框架中找到的方式。因為實體更新存在許多問題,如果使用ASP。在更新之前,只需調用此方法

 protected virtual void AttachIfNot(TEntity entity)
    {
        if (!_dbSet.Local.Contains(entity))
        {
            _dbSet.Attach(entity);
        }
    }

對於導航屬性,只需在集合中迭代即可。



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow