ASP.NET MVC使得它可以很容易地创建简单,平面物体编辑模板。 但是,使用类似功能NHibernate当管理CRUD与几个间接性复杂对象,就不那么明显了。
例
为了说明一个简单的发票管理我的问题, 发票实体有项目属性:
public class Invoice
{
...
Project Project { get; set; } // where Project class has an Id and a Name
}
......这是映射到Projects
通过功能NHibernate表在我InvoiceMap
:
References(x => x.Project).Inverse();
在过去,我的发票实体将有一个ProjectId
,在我的数据库,这使得它更容易渲染项目ID的选择列表中引用的项目属性,但难以输出的看法,如:
public class Invoice
{
...
Guid ProjectID { get; set; }
}
但自从我开始使用功能NHibernate,我不想弄脏我有多个ID控制器。
InvoiceController
[HttpGet]
public ActionResult Edit(Guid id)
{
var invoice = _unitOfWork.CurrentSession.Get<Invoice>(id);
return View(invoice);
}
[HttpPost]
public ActionResult Edit(Invoice invoice)
{
/* How to deal with invoice.Project mapping here without introducing a second
action parameter, e.g. Guid projectId ? */
_unitOfWork.CurrentSession.SaveOrUpdate(invoice);
_unitOfWork.Commit();
return RedirectToAction("Details", new { id = invoice.Id });
}
引用的项目不应该是从我的发票/ Edit.cshtml视图编辑的,但我希望能够选择哪一个项目的发票应该属于。
我应该如何设计我的视图和控制器,使CRUD方便,同时不会搞乱我的不平整实体字段引用的ID控制器动作?