我有一些继承的代码,它使用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值吗?
答案 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选择了非空列;在将来的版本中可能无法保证这一点。