C# 在实体框架中修改同一实体是否会将该实体同步保存到数据库中?抛出异常?

C# 在实体框架中修改同一实体是否会将该实体同步保存到数据库中?抛出异常?,c#,entity-framework,C#,Entity Framework,我正在调查我们系统中的一个bug,在查看代码时,我看到开发人员查询了两次相同的实体,并用不同的值保存了它 我简化了案例,例如: Person Data: id | name | age | HasLicence 1 | david | 27 | true using (DbContext dbContext = new DbContext()) { Person person1 = dbContext.Persons.FirstOrDefau

我正在调查我们系统中的一个bug,在查看代码时,我看到开发人员查询了两次相同的实体,并用不同的值保存了它

我简化了案例,例如:

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();
}

这是否会将实体同步保存到数据库中?抛出异常?

简单的答案是两个变量都引用同一个对象实例(代理)

因此,更新person1.HasLicense时,person2.HasLicense上的值将相同

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

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

_dataContext.Save(); // updates only one entity
如果更改了datacontext的某些设置,行为可能会有所不同

如果您想了解更多实体框架的工作原理,可以在github上访问它


谢谢最后一个值将被设置。不幸的是,我在链接上找不到任何有用的信息。什么datacontext设置会影响该行为?