Dapper产生不同结果

4

我有一个表格:

create table scheduled_task
(
    scheduled_task_id serial primary key,
    description varchar(255),
    predicate varchar(10485760),
    path varchar(255),
    scheduled_task_type_id int references scheduled_task_type (scheduled_task_type_id)
);

我的数据对象:

[Table("scheduled_task")]
public class DOScheduledTask
{
    [Key]
    [Column("scheduled_task_id")]
    public long? ScheduledTaskId { get; set; }

    [Column("description")]
    public string Description { get; set;}

    [Column("predicate")] 
    public string Predicate { get; set; }

    [Column("path")]
    public string Path { get; set; }

    [Column("scheduled_task_type_id")]
    public long? ScheduledTaskTypeId { get; set; }
}

我向表中插入了一条记录,该记录填充了所有字段。

我在代码中执行以下操作:

var schedules = conn.Connection.Query<DOScheduledTask>("select * from scheduled_task ;");
var schedulesb = conn.Connection.GetList<DOScheduledTask>();

第一行返回一个记录,除了scheduled_task_id和scheduled_task_type_id以外,其余都为null。对于第二个查询,完全填充。你做错了什么?

正如您可能已经注意到的那样,两个缺失的列是表列名与属性名不同的列 - 看起来Dapper尚不支持通过Column属性进行映射。不确定最佳替代方案是什么,但我建议首先尝试这个 - stuartd
@stuartd,感谢您的评论,但它确实支持。我在其他项目中做过这个,而且效果非常好。正如我在答案中提到的那样,当我不指定查询字符串时,映射确实起作用,但是当我使用dapper的“Query”函数时,它就不起作用了。它们都使用相同的映射(和Column属性)。 - WynDiesel
你在其他项目中使用了Dapper.Extensions和/或Dapper.Contrib吗? - stuartd
1
@stuartd,是的。我做了。我现在也将它添加到不起作用的项目中,但没有改变。但是您现在让我看到了别的东西。 GetList()函数来自Dapper.SimplerCRUD,而Query()函数来自vanilla Dapper。显然,映射上有不同的实现。 - WynDiesel
2
很高兴你解决了问题。在 SO 上,你可以回答自己的问题(并接受它!),这似乎更合适。 - stuartd
显示剩余2条评论
1个回答

1
问题在于.Query.GetList来自两个不同的实现,一个是Dapper,另一个是SimpleCRUD
解决方案是创建一个自定义映射器,因为代码中列的命名与数据库中的不同。

你为什么不直接使用Contrib库呢? - Liam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接