Dapper与现有数据库和奇怪的命名约定

时间:2018-05-08 18:23:19

标签: asp.net dapper

即时通讯使用asp.net core 2.0和dapper。我的表看起来像:

N_ORDER (ID)
CREATION_DATE
N_STATUS_INT

所以,我的模型必须创建如下:

public int N_ORDER { get; set; }
public DateTime CREATION_DATE { get; set;} and etc.

有没有办法在我的模型上避免这种命名约定,好像我在使用EF Core和FluentAPI一样?所以我可以正确命名我的模型?当量:

        this.Property(c => c.OrderId).HasColumnName("N_ORDER");

由于

2 个答案:

答案 0 :(得分:0)

是的,并且该功能称为“自定义映射”。简而言之,您可以使用SetTypeMap方法指定如何将列名称映射到对象属性。 SetTypeMap需要CustomTypeMapper个对象作为参数。

如果可以使用Dapper扩展,Dapper-FluentMap隐藏了所有复杂性:

https://github.com/henkmollema/Dapper-FluentMap

我在这篇文章中写的关于这两个选项的更多细节:

https://medium.com/dapper-net/custom-columns-mapping-1cd45dfd51d6

答案 1 :(得分:0)

@DavideMauri回答建议的解决方案看起来很棒。但是,我从未使用过它。

相反,我总是使用列别名。

所以,你编写如下的SQL:

SELECT N_ORDER AS OrderId,
CREATION_DATE AS CreationDate,
N_STATUS_INT AS Status
FROM MyTable AS Order
WHERE N_ORDER = 1

您的POCO如下所示:

public class Order
{
    public int OrderId { get; set; }
    public DateTime CreationDate { get; set;}
    public int Status { get; set; }
}

你这称之为:

Order order = con.Query<Order>(sql, ......);