我正在使用ASP.NET Entity Framework,我正在尝试使用以下代码更新单个列:
[HttpGet]
public void MarkOffline(string online)
{
Users user = new Users { email = online, isOnline = false };
db.Entry(user).Property("isOnline").IsModified = true;
db.SaveChanges();
}
但是我收到了这个错误:
无法为属性'isOnline'调用成员'IsModified',因为 上下文中不存在“用户”类型的实体。添加一个 上下文的实体调用
的Add或Attach方法DbSet<Users>
。
我不知道该怎么做的部分:
要向上下文添加实体,请调用Add或Attach方法
DbSet<Users>
。
如何解决问题?
答案 0 :(得分:2)
如果您想要像这样更新,则需要附加实体主键设置所在的实体。
如果您没有主键,但只有一个(唯一的,有希望的)字段,您需要先查询记录然后更新它:
var existing = db.Users.FirstOrDefault(u => u.email == email);
existing.IsOnline = true;
db.SaveChanges();
话虽这么说,但这并不是您在Web应用程序中记录用户的在线状态的方式。您宁愿用他们执行的每个操作更新用户的LastAction
时间戳,并在用户LastAction
超过N秒或几分钟之前将用户标记为脱机。