Dapper如何在具有相同名称的2列之间进行选择

时间:2017-01-30 20:54:10

标签: dapper

我有一些继承的代码,它使用Dapper将SQL SELECT映射到一个对象。 SELECT有多个具有相同名称的列(为简洁起见,省略了一些列。)

SELECT
    created_timestamp AS CreatedDate,
    imported_timestamp AS CreatedDate
FROM Orders
WHERE OrderId = @OrderId

对数据的分析显示,每个记录只填充了2个CreatedDate列中的一个。运行一些测试显示,Dapper似乎正在选择非NULL CreatedDate。我找不到有关Dapper如何处理这种情况的任何文档。我可以依赖Dapper总是选择非NULL值吗?

1 个答案:

答案 0 :(得分:0)

Dapper是(微)ORM,它应该用于数据库CRUD操作。

那就是说,你的业务逻辑应该去别的地方。实施非常简单。不要创建具有重复名称的列。使用dapper从数据库中获取数据,并在其他位置应用业务逻辑,例如检查null或其他。

//Following is query
SELECT
    created_timestamp AS CreatedDate,
    imported_timestamp AS ImportedDate
FROM Orders
WHERE OrderId = @OrderId

//Following is your POCO/DTO
public class Order
{
    public int OrderId;//or Guid if that suits you
    public string CreatedDate;//or DateTime if that suits you
    public string ImportedDate;//or DateTime if that suits you
}

//Following is your business logic
Order order = orderService.GetOrder(orderId);
if(order.CreatedDate != null)
    //Do something
else if(order.ImportedDate != null)
    //Do something else

根据您的研究,即使Dapper选择了非空列;在将来的版本中可能无法保证这一点。