Asp.net 与现有数据库和奇怪的命名约定保持一致

Asp.net 与现有数据库和奇怪的命名约定保持一致,asp.net,dapper,Asp.net,Dapper,我使用asp.NETCore2.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一起使用一样?这样我就可以正确命名我的模型了?情

我使用asp.NETCore2.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");

谢谢

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

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

关于这两个选项的更多细节,我在这篇文章中就这一主题写过:


在@DavideMauri的回答中建议的解决方案看起来很棒。但是,我从来没有用过

相反,我总是使用列别名

因此,您可以编写SQL,如下所示:

SELECT N_ORDER AS OrderId,
CREATION_DATE AS CreationDate,
N_STATUS_INT AS Status
FROM MyTable AS Order
WHERE N_ORDER = 1
public class Order
{
    public int OrderId { get; set; }
    public DateTime CreationDate { get; set;}
    public int Status { get; set; }
}
Order order = con.Query<Order>(sql, ......);
您的POCO如下所示:

SELECT N_ORDER AS OrderId,
CREATION_DATE AS CreationDate,
N_STATUS_INT AS Status
FROM MyTable AS Order
WHERE N_ORDER = 1
public class Order
{
    public int OrderId { get; set; }
    public DateTime CreationDate { get; set;}
    public int Status { get; set; }
}
Order order = con.Query<Order>(sql, ......);
你可以这样称呼它:

SELECT N_ORDER AS OrderId,
CREATION_DATE AS CreationDate,
N_STATUS_INT AS Status
FROM MyTable AS Order
WHERE N_ORDER = 1
public class Order
{
    public int OrderId { get; set; }
    public DateTime CreationDate { get; set;}
    public int Status { get; set; }
}
Order order = con.Query<Order>(sql, ......);
Order=con.Query(sql,…);

您不能在查询中使用列别名吗?例如:
从订单中选择N\u订单作为订单ID