ASP.NET实体框架试图更新单列

时间:2017-08-23 13:15:55

标签: c# asp.net entity-framework

我正在使用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',因为   上下文中不存在“用户”类型的实体。添加一个   上下文的实体调用DbSet<Users>

的Add或Attach方法

我不知道该怎么做的部分:

  

要向上下文添加实体,请调用Add或Attach方法   DbSet<Users>

如何解决问题?

1 个答案:

答案 0 :(得分:2)

如果您想要像这样更新,则需要附加实体主键设置所在的实体。

如果您没有主键,但只有一个(唯一的,有希望的)字段,您需要先查询记录然后更新它:

var existing = db.Users.FirstOrDefault(u => u.email == email);
existing.IsOnline = true;
db.SaveChanges();

话虽这么说,但这并不是您在Web应用程序中记录用户的在线状态的方式。您宁愿用他们执行的每个操作更新用户的LastAction时间戳,并在用户LastAction超过N秒或几分钟之前将用户标记为脱机。