2010-09-30 6 views
2

Il doit y avoir une solution simple là-bas, j'essaie d'utiliser les attributs NHibernate Validator sur mes propriétés DateTime. Si la valeur est null (via [NotNull]), je souhaite que la validation échoue. Quand je soumets une valeur nulle, il est converti en 1/1/0001 12:00:00 AM et NHibernate ne le prend pas comme nul. Je suppose que je pourrais écrire une règle de validation personnalisée qui renvoie false si cette date est soumise, mais sûrement il y a un moyen standard autour de cela?NHibernate Validator et Null DateTime

Précision: Ceci est une classe d'exemple,

public class ExampleClass { 

    [NotNull] 
    public virtual DateTime MySpecialDateProperty { get; set; } 

    [NotNullOrEmpty] 
    public virtual string MyString { get; set; } 
} 

J'ai installé NHibernate Validator de sorte que dans mon contrôleur, je peux faire:

newExampleClass.IsValid() et s'il est vrai ça va persister dans le base de données, sinon je reviendrai newExampleClass.ValidationResults()

Lorsque je crée une nouvelle instance de ExampleClass, le MySpecialDateProperty initialise comme 1/1/0001 ... et le validateur ne prend pas cela comme une valeur nulle.

Édition 2: Dois-je définir DateTime sur nullable (DateTime?), ce qui empêcherait NHibernate de définir la valeur sur DateTime minimum?

+1

Que signifie "soumettre" dans ce contexte? Est-ce que votre * propriété * est nullable? –

+0

Est-ce que ma clarification éclaircit, désolé je suppose que tout le monde ne peut pas lire dans mes pensées;) –

+0

Ceci n'est pas NHibernate en réglant la valeur au DateTime minimum. C'est le .NET Framework. DateTime est un type de valeur (Struct), pas un type de référence (Class). http://msdn.microsoft.com/en-us/library/system.datetime.aspx Vous ne pouvez pas définir un DateTime sur null de la même manière que vous ne pouvez pas dire int foo = null ou bool inValid = null; –

Répondre

7

Vous devez utiliser un type Nullable. DateTime est initialisé à DateTime.MinValue (1/1/0001). Essayez:

[NotNull] 
    public virtual DateTime? MySpecialDateProperty { get; set; } 
Questions connexes