Свойство Id является частью ключевой информации объекта и не может быть изменено - PullRequest
3 голосов
/ 28 апреля 2011

У меня есть пример веб-приложения, которое я пишу, и я запутался, почему я получаю это

Свойство 'Id' является частью ключевой информации объекта и не может быть изменено.

когда я не обновляю 'Id'?

Хорошо, вот что я пытаюсь сделать.

У меня есть 2 таблицы Темы и сообщения и -

  1. Пользователь создает новую тему, он должен добавить запись темы в базу данных
  2. Получить идентификатор темы иустановить этот идентификатор в идентификатор темы сообщения
  3. Получить идентификатор этого сообщения и установить его как LastPostId темы

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

Когда я отлаживаю, я вижу, что Идентификатор категории темы устанавливается как Идентификатор темы, которого у меня нет в моем коде обновления.

//
        // insert new topic to database

        Topic topic = new Topic();

        topic.CategoryId = int.Parse(RouteData.Values["id"].ToString());
        topic.Title = postModel.Title;

        topicRepo.Add( topic );
        topicRepo.Save();

        //
        // insert post to database
        PostRepository postRepo = new PostRepository();
        Post post = new Post();

        post.TopicId = topic.Id;
        post.Body = postModel.Body;

        string strUserId = UserAccount.FormatUserName( User.Identity.Name );

        post.CreatedByUser = strUserId;
        post.CreationDate = DateTime.Now;

        postRepo.Add( post );
        postRepo.Save();

        // ***********************
        // update topic last post
        // ***********************
        Topic updateTopic = topicRepo.GetTopic( topic.Id );
        updateTopic.LastPostId = post.Id;

        TryUpdateModel( updateTopic );
        if ( ModelState.IsValid ) 
            topicRepo.Save();

Спасибо!

1 Ответ

3 голосов
/ 28 апреля 2011

Это происходит потому, что TryUpdateModel пытается обновить все опубликованные значения.Поэтому, если у вас есть одно или несколько значений, которые вы не хотите обновлять, вы должны сделать это вручную.

Например:

TryUpdateModel(updateTopic,  "", null, new string[] { "Id" });

Я предполагаю, что одно свойство с именем "ID" также передается в это действие, вызывая ошибку.

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