PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

NHibernate Postgresql DateTime-zu-Time-Konvertierung

Herausgefunden!

Anscheinend habe ich das Konvertierungsblatt verlinkt to ist entweder falsch oder veraltet. Es stellt sich heraus, dass Npgsql ein System.TimeSpan-Objekt benötigt, um eine ordnungsgemäße Konvertierung in ein Postgresql-„Zeit“-Objekt durchzuführen. Es scheint mir seltsam, dass sie versuchen würden, etwas, das einen Unterschied zwischen zwei Zeiten darstellt, in das umzuwandeln, was wir als HH:mm:ss betrachten, aber so ist es.

Anstatt den Typ meiner RunTime-Eigenschaft von System.DateTime in System.TimeSpan zu ändern, habe ich stattdessen einen benutzerdefinierten IUserType erstellt und NullSafeSet so überschrieben, dass er wie folgt aussieht

public override void NullSafeSet(IDbCommand cmd, object value, int index)
{
    var obj = (DateTime)value;

    ((IDbDataParameter) cmd.Parameters[index]).Value = new TimeSpan(0, obj.Hour, obj.Minute, obj.Second);
}