J'ai un composant que je veux stocker dans une base de données SQLite.DateTime incorrect lors de l'ajout à la base de données SQLite via (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);
}
}
Rien d'extraordinaire.
Le problème est que le TimeStamp
est correctement stocké dans la base de données (SQLite-Explorer affiche la valeur '30 -12 à 1899) Je pense qu'il a quelque chose à voir avec la façon dont NHibernate envoie le DateTime
à la base de données
NHibernate: INSERT INTO "Comp" (TimeStamp, Name) VALUES (@p0, @p1); select last_insert_rowid(); @p0 = 26.02.2010 10:08:09, @p1 = 'test1'
pour moi, il ressemble à la DateTime
est dans un format de chaîne (peut-être juste la commande .ShowSQL()
cependant) et SQLite ne peut pas gérer le format (c'est un formattage datetime allemand) J'ai essayé de changer le format à l'aide un IUserType
mais le résultat est toujours le même.
Je n'ai trouvé personne d'autre ayant ce problème donc je suppose que le problème est dans mon code mais je suis incapable de le trouver.
Voici le TestCode j'utiliser pour initialiser le DB et insérez la valeur à la 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();
}
}
}
Lors de l'exécution de cette commande et vérifier le contenu DB du TimeStamp ne pas la date/heure actuelle mais 1899- 31-12
SQlite développeur a le même problème que je viens de gaspiller 20 minutes de ma vie à essayer de comprendre –