j'ai une entité personne contenant une adresse comme un objet de valeur:objets de valeur NULL dans NHibernate
public Person()
{
WithTable("Person");
Id(x => x.Id);
Component<Address>(x => x.Address, a =>
{
a.Map(x => x.Address1);
a.Map(x => x.Address2);
a.Map(x => x.Address3);
a.Map(x => x.Town);
a.Map(x => x.Postcode);
});
}
Il indique dans les NHibernate docs que si toutes les propriétés d'un objet de valeur (Adresse1, Adresse2, etc.) sont null, le composant entier sera mappé en tant que null (ie Person.Address sera null). Cela me donne des problèmes dans les cas où tous les champs d'adresse sont nuls parce que dans mes pages où je pourrais avoir (je fais ASP MVC):
<%= Html.TextBoxFor((x => x.Address.Address1))%>
Cela rompt avec une exception de référence null. Donc je cherche une manière propre de placer l'adresse comme un nouvel objet Address() plutôt que null si tous les champs sont vides quand je charge une personne de la base de données sans le faire manuellement. J'ai réduit les idées suivantes:
Faire la vérification null à mon avis (pouah, horribles)
champs Faire de la base de données non-nullable (je traite avec une base de données existante)
Toute personne des idées ?
Devient très moche dès que vous avez réellement besoin d'éditer l'adresse dans l'interface utilisateur, pas seulement le montrer, hein? – alex
Oui, j'ai une meilleure suggestion? –
Bonnes idées, merci! Modification de l'accesseur de la propriété Address mappé pour permettre get et set comme d'habitude, mais en utilisant votre vérification null dans le get "Adresse ?? new Address();" travaux. Je peux maintenant charger et éditer des adresses même si elles sont nulles, sans modifier ma vue, et hiberner ne se confond pas. –