Как получить связанные сущности при POST запросе?

Здравствуйте коллеги. Проблема такая. Имеется метод контроллера который принимается POST запрос на редактирование модели(Обычный пост для блога), в этой модели я хочу получить связанные сущности поста, допустим комментарии или тэги, но методы ToList() не возвращают эти сущности, хотя связь имеется. Вот код метода контроллера:
[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit(Post post)
        {
            //Валидность модели
            if (ModelState.IsValid)
            {
                //Ждем в асинхроном режиме результат сохранения
                db.SaveChanges();
                foreach (var item in post.Comments.ToList())
                {
                    Debug.WriteLine(item.Text);
                }
                //Редирект на страницу поста
                return RedirectToAction("Details", new { id = post.Id });
            }
            return View(post);
        }


Код представления:
@model BlogEmpty.Models.Post

@{
    ViewBag.Title = "Edit";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Edit</h2>


@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()

     @Html.EditorForModel(Model);
        <input type="submit" value="Редактировать" class="btn btn-default" />
}

<div>
    @Html.ActionLink("К списку", "Index")
</div>


e5231d44a8eb4d1288c51981c5f6354a.png

Вообщем вопрос, почему так происходит и что я делаю не так?
  • Вопрос задан
  • 342 просмотра
Решения вопроса 2
@dmitryKovalskiy
программист средней руки
Ответ не по теме знаю. А изменения в базе происходят вообще? В вашем коде не ясно что такое db. Мне понятно что это контекст EntityFramework, но где и как он инициализируется - мне не ясно, а исходя из этого мне не ясно что вы делаете вызывая
db.saveChanges(). Где происходит изменение объектов в контексте - я не вижу.
Делать зависимость кода контроллера от EntityFramework - ПЛОХО(!!!!!!) Это конечно просто, но это плохо. Это жестокая зависимость, требующая постоянной правки исходных кодов - выводите подобные операции в DataAccessLayer.
Ответ написан
yarosroman
@yarosroman
C# the best
1. У вас даже в базу то ничего не сохраняется то, ибо вы получаете сущность из вне, она никак не привязана к контексту. Не хватает следующей строки db.Entry(post).State = EntityState.Modified;
2. db.SaveChanges(); - это даже очень, очень синхронный метод (для асинхронности надо пометить метод как async и await db.SaveChangesAsync(); )
3. Откуда у вас возьмутся связанные сущности, если вы ничего из базы не запрашиваете, а получаете сущность из заголовков Post запроса? Чтобы получить связанные сущности - var postWithComments=db.Posts.Include(i => i.Comments).Where(w=>w.Id==post.Id).First();
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы