【发布时间】:2020-03-14 21:40:55
【问题描述】:
我有一张桌子:
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>();
第一行产生一条记录,除了 schedule_task_id 和 schedule_task_type_id 之外的所有内容都为空。对于第二个查询,它被完整填充。
我做错了什么?
【问题讨论】:
-
您可能已经注意到,缺少的两个列是表列名称与属性名称不同的列 - 似乎是Dapper does not yet support mapping via
Columnattributes。不确定最好的替代方案是什么,但我建议先尝试this。 -
@stuartd,感谢您的评论,但它确实支持它。我在其他项目中做过这个,效果很好。您还会注意到,正如我在回答中提到的那样,当我没有指定查询字符串时,映射确实有效,但当我使用 dapper 的“查询”函数时它不起作用。它们都使用相同的映射(和列属性)。
-
你在其他项目中使用过 Dapper.Extensions 和/或 Dapper.Contrib 吗?
-
@stuartd,是的。我愿意。我现在也将它添加到非工作项目中,没有任何变化。然而,你让我现在看到了别的东西。 GetList() 函数来自 Dapper.SimplerCRUD,Query() 函数来自 vanilla Dapper。显然,映射上的不同实现。
-
很高兴你能成功。您可以在 SO 上回答您自己的问题(并接受它!),这在此处似乎更合适。
标签: c# postgresql dapper dapper-simplecrud