列中的NULL值的Dapper Cast异常

mın*_*maτ 8 c# sqlite dapper

我正在使用SQLite和它的闭包扩展来存储层次结构.非闭包表创建为

_connection.Execute(@"CREATE TABLE IF NOT EXISTS category (
    id INTEGER NOT NULL PRIMARY KEY,
    name TEXT,
    parent_id INTEGER,
    FOREIGN KEY (parent_id) REFERENCES category (id)
);");
Run Code Online (Sandbox Code Playgroud)

插入的根节点parent_id设置为NULL.Dapper来往的类是

public class TestRecord
{
    public long id;
    public string name;
    public long? parent_id;
}
Run Code Online (Sandbox Code Playgroud)

在我看来,Dapper在读取根节点或非根节点时应该没有任何问题,因为所讨论的列明显标记为可为空.但是,查询所有条目如下:

_connection.Query<TestRecord>(@"SELECT * FROM category;");
Run Code Online (Sandbox Code Playgroud)

将抛出根节点,因为它无法投射某些东西(这很奇怪,因为任何地方都没有涉及32位整数):

Unhandled Exception: System.Data.DataException: 
Error parsing column 2 (parent_id=1 - Int64) ---> 
System.InvalidCastException: Unable to cast object of type 'System.Int64' to type 
  'System.Int32'.
Run Code Online (Sandbox Code Playgroud)

一个解决方法返回正确的结果是

.Query<TestRecord>(@"SELECT id, IFNULL(parent_id, 0), name FROM category;");
Run Code Online (Sandbox Code Playgroud)

但出于几个原因,这是不可取的.我特别不想列出查询中的所有列,也不想介绍parent_id特殊情况.

不使用Dapper并手动映射它可以很好地处理原始查询,当然对于sqlite CLI也是如此.

那么,我怎样才能让Dapper接受并映射正确的条目?

编辑:我正在使用Dapper 1.50.4和dotnet core 2.0.

mın*_*maτ 2

根据马克的评论,这种情况不应该发生,并且需要库修复。该问题正在此处进行跟踪,并且也会影响其他人。