Nullable DateTime in NHibernate 2.0.1

Zwei Probleme, die wahrscheinlich sofort offensichtlich sein, aber ich habe schon zu lange tracking Sie nieder:

  1. Ich habe eine AuditInterceptor, um automatische überwachung für Entitäten, die Umsetzung meiner IAuditable-Schnittstelle, die verwendet wird, wie folgt:

    public class AuditInterceptor : EmptyInterceptor
    {
    public override bool OnSave(object entity, object id, object[] state, string[] propertyNames, IType[] types)
    {
    var überwachbare = Entität als IAuditable;

        if (auditable == null)
            return false;
    
        var now = DateTime.Now;
        auditable.CreateDate = now;
        auditable.ModifiedDate = now;
    
        return true;
    }
    
    public override bool OnFlushDirty(object entity, object id, object[] currentState,
        object[] previousState, string[] propertyNames, IType[] types)
    {
        var auditable = entity as IAuditable;
    
        if (auditable == null)
            return false;
    
        auditable.ModifiedDate = DateTime.Now;
    
        return true;
    }

    }

Den beiden Feldern sind beide keine null-Werte in der Datenbank, POCO, und die mapping-Datei. Aber auf Speichern, während die interceptor aufgerufen wird (können Schritt für Schritt durch und finden Sie in den betreffenden Feldern wird auf DateTime festgelegt.Nun, es gibt noch eine SqlDateTime-Ausnahme ausgelöst wird:

SqlDateTime-überlauf. Muss zwischen 1/1/1753 12:00:00 UHR und 12/31/9999 11:59:59 Uhr

Habe ich das schon mal gesehen, wo es einen mismatch irgendwo (mapping-Datei, Datenbank, POCO), wo die DateTime angegeben ist null, in einigen und in anderen nicht. Jedoch habe ich überprüft und es ist alles gut an dieser front. Kann ich manuell die Werte vor SaveOrUpdate(entity) und fügt es/speichert ohne Probleme. Ohne manuelle Einstellung von Ihnen, Es ist als wenn der interceptor wird ausgelassen zusammen (auch wenn ich weiß, dass es nicht) und die beiden DateTime-Eigenschaften werden setzen Sie niemals (und damit behandelt werden als DateTime.MinValue: 01/01/0001...) und somit out of range. Aber wenn man durch, die Werte sind richtig auf DateTime festgelegt.Nun.

Was ist passiert? Für was es Wert ist, hatte ich sogar einen Ereignis-listener vorher auch, und es führte zu dem gleichen Problem.

  1. Jetzt für eine dumme Frage, die muss beantwortet worden sind irgendwo da draußen, aber ich kann es nicht finden: Als Teil des Umgangs mit den oben genannten Problem, habe ich schnell überprüft, um zu sehen, ob die DateTime-Werte zulässt, während, aber ich kenne die aktuellen änderungen mit NHibernate-2.* ist, dass die NHibernate.Nullables sind nicht mehr unterstützt. Also, was tun Sie in Ihrer mapping-Datei zum zuordnen der nullable DateTime? Typ? Für z.B.:

Verständlicherweise nicht funktioniert:

<property name="CreateDate" column="CreateDate" type="DateTime?" not-null="false" />

Ist und nicht mehr unterstützt:

<property name="ModifiedDate" column="ModifiedDate" type="Nullables.NHibernate.NullableDateTimeType, Nullables.NHibernate" not-null="false"/>

Alle Zeiger wäre sehr geschätzt werden!

InformationsquelleAutor Ted | 2009-02-27
Schreibe einen Kommentar