如何按id更新记录

本文关键字:新记录 更新 id 何按 | 更新日期: 2023-09-27 18:00:44

我是EntityFramework的新手,很难理解为什么第一个代码不更新,而第二个代码更新。我的目标是在不查询数据库的情况下更新记录。

这太明显了吗?

using (CHATDBEntities db = new CHATDBEntities())
    {
        // update buddy
        onlines buddy = new onlines();
        buddy.id = 56;
        buddy.last_seen = DateTime.Now;
        buddy.status = (int)UserStatuses.Status.Chatting;
        buddy.connected_to_id = 34;
        buddy.room_id = 2;
        db.SaveChanges();
    }
    using (CHATDBEntities db = new CHATDBEntities())
    {
        // update buddy
        var buddy = db.onlines.First();
        buddy.last_seen = DateTime.Now;
        buddy.status = (int)UserStatuses.Status.Chatting;
        buddy.connected_to_id = 34;
        buddy.room_id = 2;
        db.SaveChanges();
    }

看起来它和"id"有关,后者是主标识密钥。

如何按id更新记录

您必须检索一个实体才能更新它,您不能只创建一个与数据库中的记录id相同的新实体,然后期望EF神奇地知道它需要更新数据库。您可以尝试将它附加到ObjectContext,但这不是应该进行更新的方式。

您可能需要将新好友添加到onlines收藏?

db.onlines.Add(buddy); // << this
db.SaveChanges();

原因是您需要在更新对象之前将对象选择到ObjectContect中。更新实体的唯一方法似乎是首先读取它。

请参阅另一个stackoverflow链接,它回答了这个问题。