Dapper MultiMap이 splitOn에 NULL 값으로 작동하지 않습니다.

dapper

문제

나는 NULL 이 포함 된 열에서 분할하려고하는 dapper의 MultiMaps에 문제가 있습니다. Dapper는 객체를 인스턴스화하지 않는 것처럼 보이고 매핑 함수는 객체 대신 null 을받습니다.

나의 새로운 시험은 여기있다 :

public static void IsNotNull(this object obj)
{
    if (obj == null)
    {
        throw new ApplicationException("Expected not null");
    }
}

실패한 행은 product.Category.IsNotNull(); cat 가 매핑 함수에 전달한 사실 때문에 null 입니다.

또한이 메서드를 Assert 클래스에 추가했습니다.

public static void IsNotNull(this object obj)
{
    if (obj == null)
    {
        throw new ApplicationException("Expected not null");
    }
}

수락 된 답변

내가 다시 방문해도 괜찮을지라도 이것은 "디자인 상"입니다.

특히이 동작은 왼쪽 조인에 도움이됩니다. 예를 들면 다음과 같습니다.

var sql = @"select 1 as id, 'abc' as name, '' as split, 
            NULL as description, 'def' as name";
    var product = connection.Query<Product, Category, Product>(sql, (prod, cat) =>
    {
        prod.Category = cat;
        return prod;
    }, splitOn: "split").First();

문제는 Driver 개체의 "포괄적 인"생성을 허용하면 모든 Car 에 조인에 실패한 Driver 가있는 것입니다.

전체 세그먼트 인 분할을 스캔하고 모든 값은 보장 할 수 우리를 해결하려면 NULL 매핑하기 전에 NULL 개체를. 이것은 멀티 매퍼에 아주 작은 퍼펙트 (impact) 효과를 줄 것입니다.

사례에 대한 해결 방법을 위해 대리 열을 삽입 할 수 있습니다.

var sql = @"select 1 as id, 'abc' as name, '' as split, 
            NULL as description, 'def' as name";
    var product = connection.Query<Product, Category, Product>(sql, (prod, cat) =>
    {
        prod.Category = cat;
        return prod;
    }, splitOn: "split").First();

인기 답변

시각화를 원하는 모든 사람들에게 :

Dapper가 마지막으로 동일한 열 이름으로 나뉩니다.

여기에 이미지 설명을 입력하십시오.

열 위치를 바꿔 봅시다.

여기에 이미지 설명을 입력하십시오.

null 문제 :

여기에 이미지 설명을 입력하십시오.

스왑 된 열 null :

여기에 이미지 설명을 입력하십시오.

구조에 Spliton :

여기에 이미지 설명을 입력하십시오.




아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.