2017-01-30 8 views
2

У меня есть унаследованный код, который использует Dapper для отображения SQL SELECT в объект. SELECT имеет несколько столбцов с одинаковым именем (некоторые столбцы опущены для краткости).Как Dapper выбирает между двумя столбцами с тем же именем

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

Анализ данных показывает, что для каждой записи заполняется только один из 2 столбцов CreatedDate. Запуск некоторых тестов показал, что Dapper, кажется, выбирает не-NULL CreatedDate. Я не мог найти никакой документации о том, как Dapper справляется с этой ситуацией. Могу ли я полагаться на Dapper, всегда получая значение, отличное от NULL?

+0

Почему у вас есть 2 столбца с таким же именем? Каков ваш вариант использования? – Shyju

ответ

0

Dapper is (micro) ORM и его следует использовать для операций с CRUD базы данных.

При этом ваша бизнес-логика должна идти куда-то еще. Реализация довольно проста. Не создавайте столбцы с повторяющимися именами. Получайте данные из базы данных с помощью dapper и применяйте свою бизнес-логику в другом месте, например, для проверки null или else.

//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; это не может быть гарантировано в будущих версиях.

 Смежные вопросы

  • Нет связанных вопросов^_^