c# - 实体类对象改变了它的值,尽管它没有改变

标签 c# entity-framework class entity

我有两个对象,它们具有来自同一查询的值

即(这不是 C# 代码,只是伪代码)

Class Obj = DbContext.Kid(K => K.Id == 2).FirstOrDefault();

Class Obj1 = DbContext.Kid(K => K.Id == 2).FirstOrDefault();

Id = 2,状态 = 1

现在如果我设置

Obj.Status = 2;

在 C# 代码中

然后 Obj1 也将其状态从 1 更改为 2

为什么会这样?

最佳答案

您需要了解 DBContext 是什么。

Check DBContext documentation here .

当您在同一个 DBContext 中工作时,它会跟踪您正在使用的实体。

因此,当您检索相同的实体并更改某些内容时,当您从相同的 DBContext 检索它时,它将描述更改,即使它位于当前应用程序中的另一个类或服务中。

DBContext attach 。查看attach的文档

Attaches the given entity to the context underlying the set. That is, the entity is placed into the context in the Unchanged state, just as if it had been read from the database.

稍后,当从上下文中检索它时,它将处于最后已知的状态。

如果您想刷新上下文中的项目,可以执行如下操作:

Obj.State = EntityState.Detached;
Class Obj1 = DbContext.Kid(K => K.Id == 2).FirstOrDefault();

请记住,Obj 将被分离,您将无法再使用它执行传播到数据库的操作。

关于c# - 实体类对象改变了它的值,尽管它没有改变,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59422030/

相关文章:

c# - 如何自动更新站点 RSS 提要

C# SqlMethods 喜欢不工作

.net - 基于POCO的多层.NET框架

asp.net-mvc - MVC Controller 创建新记录

c# - 从 Entity Framework 实体获取列数据类型

Java如何查找类? (试图加载驱动程序 : com. mysql.jdbc.Driver)

python - 使用类的 __call__ 方法作为 Numpy curve_fit 的输入

c# - 从类库访问 ViewContext

c# - 如何将类 Type 传递给函数以将其转换为函数

c# - 如何在C#中随机枚举列表项?