說我有一個類,如: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)