gpt4 book ai didi

c# - 为什么我要在 EF 中进行简单更新时遇到所有障碍?

转载 作者:太空狗 更新时间:2023-10-29 19:39:36 24 4
gpt4 key购买 nike

我有身份证,我有名字。所以本质上,我的方法只有这些参数:

public void Foo(int id, string name)
{
}

我在方法中有这样一段逻辑:

User user = new User(){ Id = id, Name = name };
Db.Entry(user).State = System.Data.EntityState.Modified;
Db.SaveChanges();

就是这样。没有什么花哨。我收到此错误:“ObjectStateManager 中已存在具有相同键的对象。ObjectStateManager 无法跟踪具有相同键的多个对象”

Ladislav Mrnka 的回答:An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key

建议使用 context.Entry(oldEntity).CurrentValues.SetValues(newEntity); 但我真的没有 oldEntity。谁能告诉我如何只更新 User 的 1 个属性?我快疯了。

最佳答案

I only create once per request, once created I store it inside HttpContext.Items. Hence even though I make multiple request to DB, it uses same DbContext. Does that help?

如果“对数据库的多个请求”中的任何一个加载具有相同 ID 的用户,您将得到此异常。尝试使用这个:

public void Foo(int id, string name) {
var user = Db.Users.Local.SingleOrDefault(u => u.Id == id);
if (user == null) {
user = new User { Id = id };
Db.Users.Attach(user);
}

user.Name = name;
Db.SaveChanges();
}

代码首先尝试从已经加载的实体中获取用户实例(不查询数据库),只有当用户尚未加载时才创建一个新实例。

关于c# - 为什么我要在 EF 中进行简单更新时遇到所有障碍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11832420/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com