Mam komponent, który chcę przechowywać w bazie danych SQLite.Nieprawidłowe ustawienie DateTime po dodaniu do SQLite DB przez (Fluent) NHibernate
public class Comp : Entity
{
public virtual DateTime TimeStamp { get; set; }
public virtual String Name { get; set; }
}
public class CompMap : ClassMap<Comp>
{
public CompMap()
{
Id(x => x.Id);
Map(x => x.TimeStamp);
Map(x => x.Name);
}
}
Nic nadzwyczajnego.
Problemem jest to, że TimeStamp
jest nieprawidłowo przechowywane w dB (SQLite-Explorer pokazać wartość '30 -12-1899') myślę, że to ma coś wspólnego ze sposobem nHibernate wysyła DateTime
do bazy
NHibernate: INSERT INTO "Comp" (TimeStamp, Name) VALUES (@p0, @p1); select last_insert_rowid(); @p0 = 26.02.2010 10:08:09, @p1 = 'test1'
dla mnie to wygląda jak DateTime
jest w formacie String (może być po prostu komendę .ShowSQL()
chociaż) i SQLite nie obsługuje formatu (jest to niemiecki datetime formatowanie) próbowałem zmienić format za pomocą IUserType
, ale wynik jest wciąż taki sam.
Nie znalazłem nikogo innego o tym problemie, więc zakładam, że problem jest w moim kodzie, ale nie mogę go znaleźć.
Oto testcode używać do zainicjowania DB i wstawić wartość do DB
using System;
using System.IO;
using ConsoleApplication1.db;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var sessionFactory = Fluently.Configure().Database(SQLiteConfiguration.Standard.UsingFile("test.db").ShowSql())
.Mappings(m => m.FluentMappings.AddFromAssembly(typeof(Comp).Assembly))
.ExposeConfiguration(config =>
{
if (File.Exists("test.db"))
{
File.Delete("test.db");
}
new SchemaExport(config)
.Create(false, true);
})
.BuildSessionFactory();
var session = sessionFactory.OpenSession();
var ts = DateTime.Now;
Comp c = new Comp
{
Name = "test1",
TimeStamp = ts
};
session.Save(c);
session.Flush();
session.Close();
}
}
}
Podczas wykonywania tego polecenia i sprawdzając zawartość DB datownik nie posiada aktualną datę/czas, ale 1899- 31-12
SQlite programista ma ten sam problem, który zmarnowałem 20 minut mojego życia, próbując dowiedzieć się –