我的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提供程序。它运行正常,我考虑使用Dapper 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);
}
我得到一个execption,因为表中的ParentCategoryId字段无法转换为Int32? ParentCategoryId。 此外,如果我使用ADO.NET ExecuteReader,我总是可以检查该字段是否可为空,如果未设置外键,则为null。 所以我正在为这个表寻找合适的数据映射。
答案 0 :(得分:0)
我找到了解决方案。我刚刚将ParentCategoryId类型更改为INT,因为INTEGER是64位,所以现在没有强制转换问题。