Можно ли обновить объект, который содержится в ObjectContext для повторного использования без сохранения в БД? - PullRequest
0 голосов
/ 14 марта 2012

Я создаю мобильное приложение MVC и столкнулся со многими проблемами, но это меня очень беспокоит.

Это класс Message, к которому я обращаюсь:

    public class Message
{
    public int MessageID { get; set; }
    public string Title { get; set; }
    public string Content { get; set; }
    public DateTime Recieved { get; set; }

    [ForeignKey("User")]
    public int AuthorUserID { get; set; }

    //P\\ Navigation properties
    public virtual ICollection<MessageRecipient> MessageRecipients { get; set; }
    public virtual User User { get; set; }
}

Я создаю новый объект Message и сохраняю его в базе данных.

            messageService.AddMessage(newMessage);
            Message freshMessage = messageService.GetNewestMessage();

На данный момент к нему не прикреплены Получатели. Пользователь Получает перенаправление в представление, где он может добавлять получателей к сообщению.

Когда пользователь добавляет получателя, я вызываю метод через ajax, который создает объект MessageRecipient и добавляет его в коллекцию получателей сообщения.

message.MessageRecipients.Add(recipient);

Идеальная ситуация: когда пользователь заканчивает добавлять получателей и возвращается в представление редактирования, добавленные получатели становятся видимыми.

Когда вызывается действие Edit, вызывается метод GetMessage

Message message = messageService.GetMessage(id);

Поскольку это сообщение было получено до того, как оно будет храниться в ObjectContext, EF будет обслуживать меня из памяти, а не запрашивать в БД новую, и это то, что я хочу, чтобы это произошло. Я не знаю, как сохранить изменения в этом ObjectContext без сохранения изменений в Db, вызвав SaveChanges ().

Итак, мой вопрос: есть ли способ изменить состояние сущности, хранящейся в памяти, чтобы в следующий раз, когда к нему поступил запрос, я получил сущность с изменениями, которые я в нее внес?

Я просто хочу поработать с объектом и сохранить его в Db, когда я закончу с ним, а не совершать поездку в Db каждый раз, когда пользователь добавляет получателя в сообщение.

Я новичок в .NET и EF ...

Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 14 марта 2012

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

Нет, оно не будетне будет удерживаться в контексте, если вы не разделяете контекст между запросами.Вы должны использовать новый контекст для каждого запроса (даже для каждого запроса Ajax).Есть несколько причин , почему вы не должны делиться контекстом.Посчитайте еще один - утечка контекста равна утечке памяти.

Итак, мой вопрос: есть ли способ изменить состояние сущности, хранящейся в памяти, в следующий раз, когда она будет запрошена, я получусущность с изменениями, которые я внес в нее?

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...