我有一个组件,我想存储到SQLite数据库.
public class Comp : Entity { public virtual DateTime TimeStamp { get; set; } public virtual String Name { get; set; } } public class CompMap : ClassMap{ public CompMap() { Id(x => x.Id); Map(x => x.TimeStamp); Map(x => x.Name); } }
没什么好看的.
问题是TimeStamp
错误地存储在DB中(SQLite-Explorer显示值'30 -12-1899')我认为它与nHibernate发送DateTime
到数据库的方式有关
NHibernate: INSERT INTO "Comp" (TimeStamp, Name) VALUES (@p0, @p1); select last_insert_rowid(); @p0 = 26.02.2010 10:08:09, @p1 = 'test1'
对我来说,它看起来像是DateTime
字符串格式(可能只是.ShowSQL()
命令),SQLite无法处理格式(它是德国日期时间格式)我试图改变格式使用IUserType
但结果仍然是相同的.
我没有发现其他人有这个问题,所以我假设问题在我的代码中,但我无法找到它.
这是我用来初始化DB并将值插入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(); } } }
执行此命令并检查DB内容时,TimeStamp没有当前日期/时间,但是1899-31-12