【问题标题】:Dapper yielding different resultsDapper 产生不同的结果
【发布时间】: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 Column attributes。不确定最好的替代方案是什么,但我建议先尝试this
  • @stuartd,感谢您的评论,但它确实支持它。我在其他项目中做过这个,效果很好。您还会注意到,正如我在回答中提到的那样,当我没有指定查询字符串时,映射确实有效,但当我使用 dapper 的“查询”函数时它不起作用。它们都使用相同的映射(和列属性)。
  • 你在其他项目中使用过 Dapper.Extensions 和/或 Dapper.Contrib 吗?
  • @stuartd,是的。我愿意。我现在也将它添加到非工作项目中,没有任何变化。然而,你让我现在看到了别的东西。 GetList() 函数来自 Dapper.SimplerCRUD,Query() 函数来自 vanilla Dapper。显然,映射上的不同实现。
  • 很高兴你能成功。您可以在 SO 上回答您自己的问题(并接受它!),这在此处似乎更合适。

标签: c# postgresql dapper dapper-simplecrud


【解决方案1】:

问题在于.Query.GetList 来自两个不同的实现;一个来自 Dapper,另一个来自 SimpleCRUD

解决方案是创建一个自定义映射器,因为代码中的列命名与数据库中的不同。

【讨论】:

猜你喜欢
  • 2018-05-23
  • 2017-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多