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のSQLiteADO.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にキャストできないため、実行されますか?ParentCategoryId。また、ADO.NET ExecuteReaderを使用すると、フィールドでnull許容値をいつでも確認でき、外部キーが設定されていない場合はnull値になります。したがって、このテーブルの適切なデータマッピングを探しています。

4

1 に答える 1

0

解決策を見つけました。INTEGER は 64 ビットであるため、ParentCategoryId タイプを INT に変更したところ、キャストの問題はなくなりました。

于 2012-11-22T21:52:36.410 に答える