Обновите дочернюю таблицу в Entity Framework - PullRequest
0 голосов
/ 07 марта 2012

У меня в БД 2 таблицы: «Соревнования» и «Ответы на соревнования».Каждый конкурс всегда будет иметь 3 ответа.Я хочу иметь возможность редактировать Конкурс и Ответы на Конкурс для одного и того же представления.Мне удалось заставить представление работать, используя шаблоны редактора

Итак, это мой шаблон редактора:

 @ModelType golfbug.Answer

<div class="editor-label left">
 Answer:<br />
 </div>
<div class="editor-field right">
@Html.HiddenFor(Function(model) model.CompetitionID)
@Html.HiddenFor(Function(model) model.CompetitionAnswersID)
@Html.EditorFor(Function(model) model.CompetitionAnswer)
</div>
<div class="clear"></div>

И это мое представление

@ModelType golfbug.Competition

@Code
ViewData("Title") = "Edit"
End Code

<h2>Edit</h2>

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript">       </script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")"    type="text/javascript"></script>

@Using Html.BeginForm()
@Html.ValidationSummary(True)
@<fieldset>
    <legend>Competition</legend>

    @Html.HiddenFor(Function(model) model.CompetitionID)

    <div class="editor-label left">
        @Html.LabelFor(Function(model) model.ClientID, "Client")
    </div>
    <div class="editor-field right">
        @Html.DropDownList("ClientID", String.Empty)
        @Html.ValidationMessageFor(Function(model) model.ClientID)
    </div>
    <div class="clear"></div>
    <div class="editor-label left">
        @Html.LabelFor(Function(model) model.StartDate)
    </div>
    <div class="editor-field right">
        @Html.EditorFor(Function(model) model.StartDate)
        @Html.ValidationMessageFor(Function(model) model.StartDate)
    </div>
      <div class="clear"></div>
    <div class="editor-label left">
        @Html.LabelFor(Function(model) model.CompetitionName)
    </div>
    <div class="editor-field right">
        @Html.EditorFor(Function(model) model.CompetitionName)
        @Html.ValidationMessageFor(Function(model) model.CompetitionName)
    </div>
      <div class="clear"></div>
    <div class="editor-label left">
        @Html.LabelFor(Function(model) model.CompetitionDetails)
    </div>
    <div class="editor-field right">
        @Html.EditorFor(Function(model) model.CompetitionDetails)
        @Html.ValidationMessageFor(Function(model) model.CompetitionDetails)
    </div>
      <div class="clear"></div>
    <div class="editor-label left">
        @Html.LabelFor(Function(model) model.CompettionQuestion)
    </div>
    <div class="editor-field right">
        @Html.EditorFor(Function(model) model.CompettionQuestion)
        @Html.ValidationMessageFor(Function(model) model.CompettionQuestion)
    </div>
    <div class="clear"></div>

    @Html.EditorFor(Function(model) model.Answers)



    <p>
        <input type="submit" value="Save" />
    </p>
</fieldset>
 End Using

<div>
@Html.ActionLink("Back to List", "Index")
</div>

КогдаЯ нажимаю кнопку сохранения, мне нужен контроллер, чтобы обновить ответы в таблице ответов.На данный момент у меня просто есть код, сгенерированный Visual Studio.Я предполагаю, что должен пройтись по ответам и обновить их, но я не уверен, как это сделать.

Вот мой код контроллера:

Function Edit(competition As Competition) As ActionResult
        If ModelState.IsValid Then

            db.Competitions.Attach(competition)
            db.ObjectStateManager.ChangeObjectState(competition, EntityState.Modified)

            db.SaveChanges()

            Return RedirectToAction("Index")
        End If

        ViewBag.ClientID = New SelectList(db.Clients, "ClientID", "ClientName", competition.ClientID)
        Return View(competition)
    End Function

Любая помощь будет признательна,Я искал в Google уже 2 дня.

1 Ответ

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

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

db.Answers.Add (Competition.Answers [0]);

Кроме того, проверьте эту ссылку с информацией о различиях междуПрисоединение и добавление

Entity Framework 4 - AddObject vs Attach

Поскольку вы сказали, что у соревнований всегда будет 3 ответа, вот альтернативное решение: Когда вы Создайте «Конкурс», вы можете создать 3 Ответа на Конкурс (с флагом, помечающим их как неотвеченные).Тогда ваш код редактирования должен работать просто отлично.

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