簡體   English   中英

在 Entity Framework 中修改同一個實體是否會同步將實體保存到數據庫中? 拋出異常?

[英]Does modifying the same entity in Entity Framework will save the entity to the database synchronously? throw exception?

我正在調查我們系統中的一個錯誤,在查看代碼時,我看到開發人員查詢了兩次相同的實體並使用不同的值保存它。

我簡化了案例,例如:

Person Data:
id  |   name    |   age |   HasLicence
1   |   david   |   27  |   true


using (DbContext dbContext = new DbContext())
{
    Person person1 = dbContext.Persons.FirstOrDefault(p=>p.age == 27);
    Person person2 = dbContext.Persons.FirstOrDefault(p=>p.name == "david");
    
    person1.HasLicence = false;
    person2.HasLicence = true;
    .
    .
    // more logic..
    .
    .
    dbContext.SaveChanges();
}

這是否會將實體同步保存到數據庫中? 拋出異常?

簡單的答案是兩個變量都引用相同的 object 實例(代理)。

因此,當您更新 person1.HasLicence 時,person2.HasLicence 上會出現相同的值。

a.HasLicence = true;
Assert.AreEqual(a.HasLicence , b.HasLicence );

b.HasLicence = false;
Assert.AreEqual(a.HasLicence , b.HasLicence );

_dataContext.Save(); // updates only one entity

如果您更改了數據上下文的設置,行為可能會有所不同。

如果您想了解更多實體框架的工作原理,您可以在 github 上訪問它

https://github.com/dotnet/ef6

暫無
暫無

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

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