2010-05-21 5 views
3

J'ai une classe Date qui recouvre le DateTime? class (aide à se moquer de DateTime.Now, de notre domaine, etc).Comment puis-je dire à NHibernate de charger un composant comme non nul même si toutes ses propriétés sont nulles?

La classe de classe Date n'a qu'une seule propriété protégée: DateTime? Date

public class Date 
{ 
    protected DateTime? date; 
} 

// mapping in hbm 
<component name="CompletedOn"> 
    <property column="StartedOn" name="date" access="field" not-null="false" /> 
</component> 

Des NHibernate docs:

Like all value types, components do not support shared references. The null value semantics of a component are ad hoc. When reloading the containing object, NHibernate will assume that if all component columns are null, then the entire component is null. This should be okay for most purposes.

Puis-je modifier ce comportement? Je veux que ma classe Date soit instanciée même si la date est nulle.

Merci,

Répondre

4

Je ne pense pas que vous pouvez remplacer ce comportement.

Cependant, il est généralement plus facile de faire fonctionner NH comme d'habitude (récupérer null) et d'envelopper dans votre modèle de domaine.

Mais à partir de ce que je vois, il semble que vous le faites peut-être pour une présentation (liaison de données?) Préoccupation. N'est-il pas plus facile d'exposer un DateTime??

+0

Mocking datetime.now est un problème alors ... –

+0

De toute façon, vous ne pouvez pas simuler une méthode statique. Vous devez injecter un service "heure actuelle". Vous essayez de gérer cela au mauvais niveau. –

4

Je pense que vous pourriez réaliser ce comportement en utilisant un écouteur qui implémente IPostLoadEventListener. Une fois l'entité chargée, vous pouvez vérifier si le composant est nul et le remplacer si c'est le cas.