Отношения не сохраняются при обновлении модели с использованием кода EF4 - PullRequest
0 голосов
/ 09 февраля 2011

Как гласит заголовок, я делаю успешное обновление, но оно не сохранит отношения, такие как роль пользователя или что-то еще. Это прекрасно работает, когда я добавляю пользователя (в моем случае) с ролями и всем, но обновление не работает, это только с отношением, все остальное обновляется. У меня есть эта проблема и с другими объектами. У кого-нибудь есть идеи, почему это не сохранит отношение, если оно будет изменено при обновлении? Я также опубликовал некоторый код, но я чувствую, что здесь это не так важно. Я думаю, что просто упускаю что-то простое.

if (ModelState.IsValid)
            {
                //hämta användaren och redigera parametrar
                var user = _userService.GetById(viewModel.User.Id);

                viewModel.User.Roles = user.Roles;

                //kolla språken
                if (viewModel.CultureSelected != null)
                {                    
                    foreach (var item in viewModel.CultureSelected)
                    {                        
                        viewModel.User.LanguageCultures.Add(_languageCultureService.GetById(item));                        
                    }
                }

                //updatera och spara
                TryUpdateModel(user, "User");
                _userService.Save();

                ViewData[Message] = "";
                return RedirectToAction("Lista");
            }

EDIT

В этом случае я добавил Languagecultures к user напрямую вместо viewmodel.user:

public ActionResult Redigera(AdminUserAddViewModel viewModel)
        {
            //kolla om state är valid
            if (ModelState.IsValid)
            {
                //hämta användaren och redigera parametrar
                var user = _userService.GetById(viewModel.User.Id);                

                //kolla språken
                if (viewModel.CultureSelected != null)
                {                    
                    foreach (var item in viewModel.CultureSelected)
                    {                        
                        user.LanguageCultures.Add(_languageCultureService.GetById(item));
                    }
                }

                //updatera och spara
                TryUpdateModel(user, "User");
                _userService.Save();

                ViewData[Message] = "";
                return RedirectToAction("Lista");
            }

            viewModel.CultureSelectList = CutlureSelectList(_languageCultureService.GetAll());
            return View(viewModel);
        }

1 Ответ

0 голосов
/ 09 февраля 2011

Я все еще новичок в MVC, но я думаю, что TryUpdateModel(user, "User") ищет только те значения HTTP-поста с префиксом "User.".Также я думаю, что он использует непосредственно опубликованные данные, а не ваш экземпляр viewModel.

...