Dire que j'ai une classe, par exemple:associations ASP.NET MVC et 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; }
}
J'ai inclus le SpouseId parce que c'est la sortie-de-the-box pour modéliser liaison à l'aide (Try) UpdateModel (basé sur ScottGu's sample MVC 2.0 code here). Dans mon mappage NHibernate, j'ai défini SpouseId sur insert = false et update = false, et mon mapping marche très bien.
j'avoir un « créer personne » forme ASP.NET MVC (2), qui utilise ensuite SpouseId pour sélectionner le conjoint:
<%
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) %>
<%
}
%>
Là où j'ai un EditorTemplate pour « PersonPicker » que seulement affiche une liste déroulante basée sur une liste de personnes dans ViewData.
Lorsque je fais ensuite TryUpdateModel() cela fonctionne très bien, je reçois mes valeurs peuplées comme attendu, c'est-à-dire que SpouseId est réglé mais pas Spouse. et le problème avec ceci est bien sûr que NHibernate utilise Person.Spouse.
Je préférerais ignorer complètement le SpouseId puisqu'il encombre mon modèle et il est seulement là à cause de ce problème.
Je pourrais bien sûr faire person.Spouse = myService.Find<Person>(person.SpouseId);
en code mais ça a une très, très mauvaise odeur.
Quelle est la meilleure façon de faire cela? De préférence, abandonner la propriété SpouseId entièrement.
(je pourrais ajouter que je suis en utilisant VS2008 et .NET 3.5)