[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.