0

我的 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);
}

我得到一个执行,因为表中的 ParentCategoryId 字段不能转换为 Int32?父类别 ID。此外,如果我使用 ADO.NET ExecuteReader,我总是可以检查该字段是否可为空,如果未设置外键,则该字段为空。所以我正在为这个表寻找一个合适的数据映射。

4

1 回答 1

0

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

于 2012-11-22T21:52:36.410 回答