如何通过id更新记录?

时间:2011-06-30 21:32:00

标签: c# entity-framework

我是一个非常新的To EntityFramework,并且无法理解为什么第一个代码不会更新而第二个代码不会更新。我的目标是在不查询db的情况下更新记录。

太明显了吗?

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”有关。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

您可能需要将新朋友添加到onlines集合中吗?

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

答案 2 :(得分:0)

原因是您需要先将对象选择到ObjectContect中,然后才能更新它。看起来更新实体的唯一方法是首先阅读它。

请参阅另一个回复此问题的stackoverflow链接。