我正在尝试接收实体并更新它,但我希望在没有跟踪的情况下获取它,以便我可以将其重新附加到上下文中。首先关闭实体框架模型中的跟踪
我有EntityFramework.dll
引用(4.1)。我从模型生成数据库。 (不是代码优先)。
获得用户:
db.Users.MergeOption = MergeOption.NoTracking;
IQueryable<User> query = db.Users;//.AsNoTracking(); //<-- apparently, this is code-first only.
return query;
更新用户:
db.Users.Attach(user); //error here.
ObjectStateEntry entry = db.ObjectStateManager.GetObjectStateEntry(user);
entry.SetModifiedProperty(propertyName);
db.SaveChanges();
return user;
错误:
An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.
我把这样的方法:
var user = userRepository.GetUsers().FirstOrDefault(u => u.UserId == userId);
user.Identifiers.Add(someIdent);
userRepository.UpdateUser(user);
它应该工作。你确定你没有收到另一个查询的用户吗? –
@Ladislav相同的查询。我在版本库中只有1个读取/获取方法,它使用该代码 –
我刚刚测试了类似的代码,没有所有的存储库负担,它适用于我。 –