说我有一个类,如:ASP.NET MVC和NHibernate协会
public class Person
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual int SpouseId { get; set; }
public virtual Person Spouse { get; set; }
}
我已经包括SpouseId,因为这是出的现成的方式使用(TRY)的UpdateModel模型绑定(根据ScottGu's sample MVC 2.0 code here)。在我的NHibernate映射中,我设置了SpouseId来插入= false和update = false,并且我的映射工作得很好。
我有一个“创造者”的形式在ASP.NET MVC(2),然后使用SpouseId选择配偶:
<%
using (Html.BeginForm())
{
%>
<%= Html.LabelFor(m => m.Name) %>
<%= Html.TextBoxFor(m => m.Name) %>
<%= Html.ValidationMessageFor(m => m.Name) %>
<%= Html.LabelFor(m => m.SpouseId) %>
<%= Html.EditorFor(m => m.SpouseId, "PersonPicker") %>
<%= Html.ValidationMessageFor(m => m.SpouseId) %>
<%
}
%>
在那里我有一个EditorTemplate为“PersonPicker”,它只是显示基于ViewData中人员列表的下拉列表。
当我然后做TryUpdateModel()它工作正常,我得到我的价值填充像预计,即SpouseId设置,但不配偶。这个问题当然是NHibernate使用Person.Spouse。
我绝对宁愿完全跳过SpouseId,因为它混乱了我的模型,而且它只是因为这个问题而存在。
我当然可以在代码中做person.Spouse = myService.Find<Person>(person.SpouseId);
,但它有一个非常非常讨厌的气味。
这样做的最好方法是什么?最好完全删除SpouseId属性。
(我想补充一点,我使用VS2008和.NET 3.5)