[NHibernate] Brak milisekund w dacie

System, który aktualizuje w XXI wiek (wymieniamy back-end + front-end baza danych pozostaje bez większych zmian), posiada bazę danych, w której rekordy przechowują informację o dacie wstawienia lub zmiany wartości.

W NHibernate – DateTime jest zapisywany z dokładnością do sekund. „Stary” system zapisywał do milisekund, a pożądane jest zachowanie tej dokładności.

Z pomocą przyszedł StackOverflow.

public class DateTimeMilisecondsConventions : IPropertyConvention
{
    public void Apply(IPropertyInstance instance)
    {
        Type type = instance.Property.PropertyType;
        if (type == typeof (DateTime) || type == typeof (DateTime?))
        {
            instance.CustomType("Timestamp");
        }
    }
}

Pod zdefiniowaniu tak klasy musimy ją włączyć w konfiguracji, korzystamy z FluentNHibernate

Fluently.Configure()
    .Database(MsSqlConfiguration.MsSql2012
    .ConnectionString(c => c.FromAppSetting("ConnectionString")))
    .Mappings(m =>
    {
        m.FluentMappings.AddFromAssemblyOf();
        m.FluentMappings.Conventions.AddFromAssemblyOf();
    })
    .BuildSessionFactory();

Dzięki takiemu podejściowi każda data jest zapisywana z dokładnością do milisekund.