我开始用nhibernate和asp mvc2开发一个web应用程序(应用程序组合)。
要正确地更改应用程序的类别,我有一些困难。
以下是我的模特:
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; }
}我的viewModel:
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可以用来更新现有的域模型吗?
您是如何处理这种更新的?
发布于 2010-07-13 10:25:28
除非您有一个非常简单的应用程序,否则很难使用与视图和域模型相同的模型。另一个需要单独使用域模型的原因是,为所有100个属性显示一个庞大的表单并不是非常方便用户。您可以更好地为不同的任务向用户展示不同的表单。当您这样做,您结束了不同的视图模型的一个领域实体无论如何。
https://stackoverflow.com/questions/3235675
复制相似问题