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