簡體   English   中英

實體框架上下文自動創建新實體

[英]Entity Framework context automatically creating new entity

我有一個EF Code First數據庫,在數據庫中創建實體之前,我先檢查是否存在相關實體,將其關聯,然后創建該實體。

例如,假設我有一個具有相關用戶實體的Order實體。 如果Order實體想存儲在數據庫中,則首先檢查User是否已經存在。 如果是這樣,我想更改Order,以便它的User屬性等於現有的User實體,而不是創建新記錄。

// check for an existing user and associate them instead of creating a new one
var existingUser = await _userRepository.GetAsync(u => u.Username == order.User.Username);
if (existingUser != null)
{
    order.User = existingUser;
    Context.Entry(order.User).State = EntityState.Modified;
}

上面的代碼中的以下行引起了該問題:

order.User = existingUser; 

在該行之前,“ Context.Users”具有兩個現有記錄(正確)。 但是在該行之后,它包含三個記錄(不正確),其中兩個記錄完全相同。

為什么代碼為什么不簡單地將existingUser對象分配給order.User屬性,而不是在Context中創建新記錄?

多虧了GertArnold,我能夠通過執行以下操作解決此問題:

更換:

order.User = existingUser;
Context.Entry(order.User).State = EntityState.Modified;

帶有:

Context.Entry(order.User).CurrentValues.SetValues(existingUser);

參考: https : //stackoverflow.com/a/14476027/1448448

這很可能是因為oldEntry和newEntry具有不同的實體密鑰值。 因為您不能更改現有實體的密鑰,所以它有可能失敗。

暫無
暫無

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

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