namespace TestNH
{
using System;
using NHibernate.Cfg;
class Program
{
static async System.Threading.Tasks.Task Main(string[] args)
{
var cfg = new NHibernate.Cfg.Configuration();
cfg.DataBaseIntegration(c =>
{
c.Driver<NHibernate.Driver.NpgsqlDriver>();
c.Dialect<NHibernate.Dialect.PostgreSQLDialect>();
c.ConnectionString = "Server=localhost; Port=5432; Database=test; User Id=postgres; Password=opensesame93";
c.LogFormattedSql = true;
c.LogSqlInConsole = true;
});
var mapper = new NHibernate.Mapping.ByCode.ModelMapper();
mapper.AddMapping<TheTimeMapping>();
var mapping = mapper.CompileMappingForAllExplicitlyAddedEntities();
cfg.AddMapping(mapping);
var sf = cfg.BuildSessionFactory();
using (var session = sf.OpenSession())
using (var tx = session.BeginTransaction())
{
var utcString = "2018-05-04T17:37:00.0000000Z";
var local = DateTime.Parse(utcString);
var utc = DateTime.Parse(utcString).ToUniversalTime();
Console.WriteLine($"local value is {local} kind is {local.Kind}");
Console.WriteLine($"utc value is {utc} kind is {utc.Kind}");
var t = new Test
{
A = local,
B = utc,
C = local,
D = utc
};
await session.PersistAsync(t);
await tx.CommitAsync();
}
}
}
public class Test
{
public virtual int Id { get; set; }
public virtual DateTime A { get; set; }
public virtual DateTime B { get; set; }
public virtual DateTime C { get; set; }
public virtual DateTime D { get; set; }
}
public class TheTimeMapping: NHibernate.Mapping.ByCode.Conformist.ClassMapping<Test>
{
public TheTimeMapping()
{
Id(x => x.Id, id =>
{
id.Generator(
NHibernate.Mapping.ByCode.Generators.Sequence,
generatorMapping => generatorMapping.Params(new { sequence = "test_id_seq"})
);
});
Property(p => p.A);
Property(p => p.B);
Property(p => p.C);
Property(p => p.D);
}
}
/*
create table test
(
id int generated by default as identity primary key,
a timestamp not null,
b timestamp not null,
c timestamptz not null,
d timestamptz not null
);
*/
}
Outputs:
local value is 05/05/2018 01:37:00 kind is Local utc value is 05/04/2018 17:37:00 kind is Utc
Database:

No comments:
Post a Comment