Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQLite中的NHibernate和Utc日期时间 让我们考虑NHiBiNe:中的以下简单类 <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyTests.Tests" namespace="MyTests.Tests"> <class name="TestClass" table="TestTable" dynamic-update="true"> <id name="Id" column="Id" type="UInt64" unsaved-value="0"> <generator class="native" /> </id> <property name="Date1" type="UtcDateTime"></property> </class> </hibernate-mapping>_C#_Sqlite_Nhibernate - Fatal编程技术网

C# SQLite中的NHibernate和Utc日期时间 让我们考虑NHiBiNe:中的以下简单类 <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyTests.Tests" namespace="MyTests.Tests"> <class name="TestClass" table="TestTable" dynamic-update="true"> <id name="Id" column="Id" type="UInt64" unsaved-value="0"> <generator class="native" /> </id> <property name="Date1" type="UtcDateTime"></property> </class> </hibernate-mapping>

C# SQLite中的NHibernate和Utc日期时间 让我们考虑NHiBiNe:中的以下简单类 <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="MyTests.Tests" namespace="MyTests.Tests"> <class name="TestClass" table="TestTable" dynamic-update="true"> <id name="Id" column="Id" type="UInt64" unsaved-value="0"> <generator class="native" /> </id> <property name="Date1" type="UtcDateTime"></property> </class> </hibernate-mapping>,c#,sqlite,nhibernate,C#,Sqlite,Nhibernate,下面的用例在对MySql和SQLite执行时会产生不同的结果 [Test] public void Test1() { //Get Now without Milliseconds DateTime now = DateTime.UtcNow; now = new DateTime(now.Ticks - (now.Ticks % TimeSpan.TicksPerSecond), now.Kind); TestC

下面的用例在对MySql和SQLite执行时会产生不同的结果

    [Test]
    public void Test1() {
        //Get Now without Milliseconds
        DateTime now = DateTime.UtcNow;
        now = new DateTime(now.Ticks - (now.Ticks % TimeSpan.TicksPerSecond), now.Kind);

        TestClass tc1 = new TestClass() { Date1 = now };
        using(ISession s = NewSession(c))
        using(ITransaction tx = s.BeginTransaction()) {
            s.Save(tc1);

            tx.Commit();

        }

        using(ISession s = NewSession(c))
        using(ITransaction tx = s.BeginTransaction()) {
            TestClass tc2 = s.Load<TestClass>(tc1.Id);
            Assert.IsNotNull(tc2);

            Assert.AreEqual(DateTimeKind.Utc, tc1.Date1.Value.Kind, "Checking kinds of tc1");
            Assert.AreEqual(tc1.Date1.Value.Kind, tc2.Date1.Value.Kind, "Comparing Kinds");

            Assert.AreEqual(now, tc2.Date1, "Comparing datetime values");
        }   
    }
亲爱的大师,你知道问题和解决方案是什么吗?这似乎是一个以前肯定有人见过的问题

谢谢
Tymek

我对sqlite和sql server也有类似的问题。我更改了所有日期时间。有点未指定,那么它不会更改它。我不确定这是否是我的错误,没有时间进一步分析。如果你能找出问题并证明它是一个bug,如果你能在中报告它就太好了。

我知道这是一个老问题,但答案可能会帮助其他人。。。如果使用的是提供程序,则只需在连接字符串中指定
DateTimeKind=Utc
。日期现在将被读取为UTC。

您正在使用哪个版本的NH?作为记录。我最终停止了使用sqlite。我最终停止了使用sqlite。这永远解决了我的问题。有人应该接受这个解决方案。我还没有确认这一点,但它看起来是一个有效的解决方案。接受。
    [Test]
    public void Test1() {
        //Get Now without Milliseconds
        DateTime now = DateTime.UtcNow;
        now = new DateTime(now.Ticks - (now.Ticks % TimeSpan.TicksPerSecond), now.Kind);

        TestClass tc1 = new TestClass() { Date1 = now };
        using(ISession s = NewSession(c))
        using(ITransaction tx = s.BeginTransaction()) {
            s.Save(tc1);

            tx.Commit();

        }

        using(ISession s = NewSession(c))
        using(ITransaction tx = s.BeginTransaction()) {
            TestClass tc2 = s.Load<TestClass>(tc1.Id);
            Assert.IsNotNull(tc2);

            Assert.AreEqual(DateTimeKind.Utc, tc1.Date1.Value.Kind, "Checking kinds of tc1");
            Assert.AreEqual(tc1.Date1.Value.Kind, tc2.Date1.Value.Kind, "Comparing Kinds");

            Assert.AreEqual(now, tc2.Date1, "Comparing datetime values");
        }   
    }
CREATE TABLE TestTable (Id  integer primary key autoincrement, Date1 DATETIME)