將實體框架7中修改的導航屬性標記為

entity-framework-core

我有一個EF7 DbContext ,禁用了更改跟踪,因為我想明確標記所有更改:

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

這完全符合我的要求。

但是,當更新引用(導航屬性)時,這不起作用。

例如,假設我的實體有兩個屬性 - ParentIdParent ,其中ParentId是外鍵, Parent是父實體的引用。

調用

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

不起作用並拋出ModelItemNotFoundException因為根據EF(而不是導航), Parent不是實體的屬性。

在EF6中,可以按如下方式完成:

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

在EF7中,沒有這樣的功能。我可以使用。來獲取INavigation對象

var entry = context.Entry(changedEntity);
entry.Property(propertyName).IsModified = true;

但無法看到任何方式將其標記為已修改。

那麼,我該怎麼做呢?

注意:我知道設置ParentId會起作用,但這不適合我,因為引用的實體尚未創建ID,因為它剛剛創建並在保存時從數據庫中獲取其ID。因此,我需要通過引用Parent設置它。

編輯:

以上註釋適用於EF6,但不再適用於我不知道的EF7。因此,解決方案正如下面的註釋和答案中所述。

一般承認的答案

哇,似乎當一個新實體附加到DbContext ,它實際上獲得了ID(在我的情況下為-1)。因此,即使目標實體是新的並且尚未添加到數據庫中,我也可以設置ParentId

我想知道是否有任何檢查新ID是唯一的(數據庫中可能已經有一個ID為-1的條目)。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因