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
整洁的ORM和SQLite执行查询_Sqlite_Orm_Mapping_Dapper - Fatal编程技术网

整洁的ORM和SQLite执行查询

整洁的ORM和SQLite执行查询,sqlite,orm,mapping,dapper,Sqlite,Orm,Mapping,Dapper,我的SQLite数据库中有一个简单的表: CREATE TABLE ProductCategories ( Id INTEGER PRIMARY KEY AUTOINCREMENT, Name NVARCHAR(128) NOT NULL UNIQUE, ImageUrl NVARCHAR(256), ParentCategoryId INTEGER, FOREIGN KEY (ParentCategoryId) REFERENCES ProductCat

我的SQLite数据库中有一个简单的表:

CREATE TABLE ProductCategories
(
    Id INTEGER PRIMARY KEY AUTOINCREMENT,
    Name NVARCHAR(128) NOT NULL UNIQUE,
    ImageUrl NVARCHAR(256),
    ParentCategoryId INTEGER,
    FOREIGN KEY (ParentCategoryId) REFERENCES ProductCategories(Id) ON UPDATE CASCADE ON DELETE CASCADE
);
我使用Devart的SQLite ADO.NET提供程序的免费版本。它工作得很好,我考虑使用简洁的ORM,但我在类型映射方面遇到了一个小问题。 对于ProductCategories表,我有以下类:

public class ProductCategory
{
    public Int32 Id { get; set; }
    public String Name { get; set; }
    public String ImageUrl { get; set; }
    public Int32? ParentCategoryId { get; set; }
}
因此,如果我尝试这样的方法:

var categories = connection.Query<ProductCategory>("SELECT * FROM ProductCategories");
foreach (var c in categories)
{
    Console.WriteLine(c.Id + " " + c.Name + " " + c.ImageUrl + " " + c.ParentCategoryId);
}
var categories=connection.Query(“从ProductCategories中选择*);
foreach(类别中的var c)
{
Console.WriteLine(c.Id+“”+c.Name+“”+c.ImageUrl+“”+c.ParentCategoryId);
}
我得到一个execption,因为表中的ParentCategoryId字段不能强制转换为Int32?父类别ID。 此外,如果我使用ADO.NET ExecuteReader,我可以始终检查字段是否为nullable,如果未设置外键,则该字段为null。
因此,我正在为这个表寻找合适的数据映射。

我找到了解决方案。我刚刚将ParentCategoryId类型更改为INT,因为INTEGER是64位的,所以现在没有强制转换问题。

通常,当dapper无法强制转换时,它会告诉您源数据的类型。它说了什么吗?或者,既然您提到了原始ado.net:GetFieldType()为该列索引返回了什么?我发现了一个问题。SQLite整数是64位的,但我使用了Int32?父类别。所以我把表中的整数类型改为INT,现在一切都好了。也许可以加上它作为答案