3

这是创建 SQLite 数据库、将一些数据填充到表中然后尝试检索它的完整代码。如果日期时间列周围有聚合函数,PetaPoco 将抛出错误。

using System;
using PetaPoco;

class Program
{
    static void Main(string[] args)
    {
        bool filenew = false;
        if (!System.IO.File.Exists(@"c:\temp\database.sq3"))
            filenew = true;
        System.Data.SQLite.SQLiteConnection sqltc = new System.Data.SQLite.SQLiteConnection("Data Source=" + @"c:\temp\database.sq3");
        sqltc.Open();
        PetaPoco.Database db = new Database(sqltc);
        if (filenew)
            db.Execute("create table test1 (ID_CHANNEL integer primary key autoincrement, dtfld DateTime null, name string)");
        test1 t = new test1();
        t.name = "No Date";
        db.Insert(t);
        t = new test1();
        t.dtfld = DateTime.Now;
        t.name = "with date";
        db.Insert(t);
// SUCCESS:
        test1 lt1 = db.First<test1>("select dtfld from test1 where ID_Channel = 2");
// FAILURE:
        test1 lt2 = db.First<test1>("select max(dtfld) as dtfld from test1 where dtfld is not null");
    }

    [PetaPoco.TableName("test1")]
    [PetaPoco.PrimaryKey("ID_Channel")]
    public class test1
    {
        public long ID_Channel { get; set; }
        public DateTime? dtfld { get; set; }
        public string name { get; set; }
    }
}

任何人都可以提出一个仍然意味着 POCO 对象包含日期时间的修复程序,并且我仍然可以访问日期的最大值吗?

4

2 回答 2

4

找到了解决方案 - 切换到 NPoco。上面的唯一变化是将“PetaPoco”替换为“NPoco”。

于 2013-11-06T03:00:10.187 回答
0

在 PetaPoco.cs 中更改private static Func<object, object> GetConverter函数。替换语句return Convert.ChangeType(src, dstType, null);

TypeConverter conv = TypeDescriptor.GetConverter(dstType);
return conv.ConvertFrom(src);
于 2016-02-06T14:35:01.307 回答