Как эффективно обновить модели с помощью ссылок (dropdownList) с помощью asp mvc и nhibernate - PullRequest
1 голос
/ 13 июля 2010

Я начал разрабатывать веб-приложение (портфель приложений) с nhibernate и asp mvc2.

У меня есть некоторые трудности, чтобы правильно изменить категорию приложения.
Вот мои модели:

 public class Application 
 {
    public virtual int  Application_ID{ get; private set; }
    public virtual string Name { get; set; }
    public virtual Category Category { get; set; }
 }
 public class Category : ILookupItem
 {
    public virtual int Category_ID { get; set; }
    public virtual string Name { get;  set; }
 }

Моя модель представления:

public class ApplicationEditModel
{
    public Application Application { get; set; }
    public SelectList Categories { get; set; }
}

Моя форма:

<% Html.BeginForm(new {id= Model.Application.Application_ID }); %>
<table>
<tr>
    <td><%=Html.LabelFor(x => x.Application.Application_ID)%></td>
    <td><%=Html.DisplayFor(x=>x.Application.Application_ID) %></td>
</tr>
<tr>
    <td><%=Html.LabelFor(x=>x.Application.Name) %></td>
    <td><%=Html.EditorFor(x=>x.Application.Name) %></td>
</tr>
<tr>
    <td><%=Html.LabelFor(x=>x.Application.Category) %></td>
<td><%=Html.DropDownListFor(x=>x.Application.Category.Category_ID,Model.Categories,"Select a category") %></td>
</tr>
<tr><td><input type="submit" /></td></tr>
</table>
<% Html.EndForm(); %>

Действие моего контроллера:

    [HttpPost]
    public ActionResult Edit(int id, FormCollection collection)
    {   
        Application app =  _service.FindById(id);
        TryUpdateModel<Application>(app, "Application");
        _service.CommitChanges();
        return RedirectToAction("Index");
    }

Я могу назначить новую категорию,но если я перехожу на другую категорию, я получаю следующее сообщение:

идентификатор экземпляра Core.Model.Category был изменен с 2 на 3

Это кажетсяпотому что defaultmodelbinder обновляет ключ назначенной категории, а не назначает новую категорию с новым новым ключом.

Как правильно обновить сущность со всеми ее ссылками?
Возможно, я мог быиспользуйте пользовательскую модель представления, свяжите ее в контроллере и затем сопоставьте ее с моей моделью домена.Но я боюсь, что это даст мне слишком много работы (в конце у меня будет около 100 свойств, 30 ссылок и 5-6 списков в моей модели приложения).
Может ли Automapper быть полезен в этом случае для обновления существующего доменамодель?
Как вы справляетесь с такого рода обновлениями?

1 Ответ

2 голосов
/ 13 июля 2010

Очень сложно использовать ту же модель, что и для модели представления, и для модели домена, если у вас нет очень простого приложения.Другая причина иметь отдельную модель домена состоит в том, что не очень удобно показывать огромную форму для всех 100 свойств.Вы можете лучше показать пользователю разные формы для разных задач.Когда вы это сделаете, вы все равно получите разные модели представления для одного доменного объекта.

...