ASP.NET 尝试更新单个列的实体框架



我正在使用 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 秒或分钟前时。

最新更新