Dapper가 같은 이름의 두 열 중에서 선택하는 방법

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이 아닌 값을 선택한다고 신뢰할 수 있습니까?

인기 답변

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가 비공 인 컬럼을 선택하더라도; 향후 버전에서는 이것이 보장되지 않을 수도 있습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow