Как обновить запись по id? - PullRequest
1 голос
/ 01 июля 2011

Я очень новичок в 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 ]

1 голос
/ 01 июля 2011

Вы должны извлечь сущность, чтобы обновить ее, вы не можете просто создать новую с тем же идентификатором, что и запись из базы данных, и ожидать, что EF волшебным образом узнает, что ей нужно обновить базу данных. Вы можете попробовать подключить его к ObjectContext, но это не то, как вы должны делать обновления.

0 голосов
/ 01 июля 2011

Причина в том, что вам нужно выбрать объект в ObjectContect, прежде чем вы сможете его обновить.Похоже, что единственный способ обновить сущность - это сначала прочитать ее.

Пожалуйста, посмотрите эту другую stackoverflow ссылку, которая отвечает на это.

0 голосов
/ 01 июля 2011

Возможно, вам нужно добавить нового собеседника в коллекцию onlines?

db.onlines.Add(buddy); // << this
db.SaveChanges();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...