Как мне обновить объект домена с помощью ViewModel с AutoMapper с использованием Entity Framework?
У меня есть View для редактирования сущности Вопроса.
Это мое действие по редактированию:
public ActionResult Edit(int id)
{
var question = db.Question.Single(q => q.question_id == id);
Mapper.CreateMap<Question, EditQuestionViewModel>();
EditQuestionViewModel eqvm = Mapper.Map<Question, EditQuestionViewModel>(question);
eqvm.QuestionTypes = new SelectList(db.Question_Type, "type_code", "type_description", question.type_code);
eqvm.Categories = new SelectList(db.Category, "category_id", "category_name", question.category_id);
eqvm.Visibility = new SelectList(new Dictionary<int, string> {
{ 1, "Ja"},
{ 0, "Nej"}
}, "Key", "Value");
return View(eqvm);
}
И моя ViewModel выглядит так:
public class EditQuestionViewModel
{
public int question_id { get; set; }
public string question_wording { get; set; }
public bool visible { get; set; }
public int question_number { get; set; }
public string help_text { get; set; }
public Category Category { get; set; }
public Question_Type Question_Type { get; set; }
public string SelectedCategory { get; set; }
public string SelectedQuestionType { get; set; }
public SelectList Categories { get; set; }
public SelectList QuestionTypes { get; set; }
public SelectList Visibility { get; set; }
public string RefUrl { get; set; }
}
Это представление:
@using (Html.BeginForm("Edit", "AdminQuestion", FormMethod.Post))
{
@Html.ValidationSummary(true)
<fieldset>
<legend>Spørgsmål</legend>
<div class="editor-label">
@Html.LabelFor(model => model.question_wording, "Spørgsmål")
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.question_wording, new { @class = "required", rows = 3, cols = 50 })
@Html.ValidationMessageFor(model => model.question_wording)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.SelectedCategory, "Hvilken kategori tilhører dette spørgsmål?")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.SelectedCategory, Model.Categories)
@Html.ValidationMessageFor(model => model.SelectedCategory)
</div>
<div class="editor-label">
@Html.LabelFor(x => x.SelectedQuestionType, "Spørgsmålstype")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.SelectedQuestionType, Model.QuestionTypes)
@Html.ValidationMessageFor(model => model.SelectedQuestionType)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.visible, "Skal dette spørgsmål være synligt?")
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.visible, Model.Visibility)
@Html.ValidationMessageFor(model => model.visible)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.question_number, "Hvilket nummer har spørgsmålet inden for sin kategori?")
</div>
<div class="editor-field">
@Html.TextBoxFor(model => model.question_number, new { @class = "required digits" })
@Html.ValidationMessageFor(model => model.question_number)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.help_text, "Hjælpetekst som hjælper brugeren med at forstå spørgsmålet:")
</div>
<div class="editor-field">
@Html.TextAreaFor(model => model.help_text, new { rows = 20, cols = 50 })
@Html.ValidationMessageFor(model => model.help_text)
</div>
<br />
<input type="submit" value="Gem" />
</fieldset>
Как обновить сущность при отправке формы?Как должно выглядеть отображение между ViewModel и EF Model с использованием AutoMapper?
Свойства
public string SelectedCategory { get; set; }
public string SelectedQuestionType { get; set; }
В ViewModel должны быть связаны с category_id и type_code в модели EF
Также обратите внимание на свойство
public bool visible { get; set; }
Я использую BIT в своей базе данных.Будет ли это работать со значениями 0 и 1, которые используются в SelectList?
Спасибо!