왜 dapper가 올바른 개수와 null 값을 반환할까요?

c# dapper

문제

데이터베이스를 나타내는 두 개의 클래스와 작은 내부 조인 쿼리를 사용하여 조금 놀아보고 싶었지만 어떤 이유로 든 결과는 null 값입니다. 나는 진부한 문서에 익숙하지 않다. 그래서 내가 docs 에서 읽었던 것과 Da 에 대한 훌륭한 대답 ( Dapper.Net에서 많은 쿼리를 작성하는 방법은 무엇인가? )에서, 나는이 셋업을 정확하게 가지고있는 것으로 보인다. 결과 수는 정확하지만 값은 모두 null입니까?

 con.Open();
    string query = @"select Orders.OrderID as OrderID,
                     Orders.OrderNumber as Orders_OrderNumber,
                     Product.ProductNumber as Product_ProductNumber,
                     Product.ProductID as Product_ProductID,
                     Product.OrderID as Product_OrderID
                     from Orders INNER JOIN Product ON Orders.OrderID = Product.OrderID WHERE Orders.OrderNumber LIKE '%" + orderNumber + "%'";
    dynamic data = con.Query<dynamic>(query);
    Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Orders), new List<string> { "OrderID" });
    Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Product), new List<string> { "ProductID" });

    var orders = (Slapper.AutoMapper.MapDynamic<Orders>(data) as IEnumerable<Orders>).ToList();
    //var orders = Slapper.AutoMapper.Map<Orders>(data);
    return orders; // count is correct but values are null

수업 :

 public class Product
    {
        public int ProductID { get; set; }
        public int OrderID { get; set; }
        public string ProductNumber { get; set; }
    }

 public class Orders
    {
        public int OrderID { get; set; }
        public string OrderNumber { get; set; }
        public List<Product> Products { get; set; }
    }

어떤 도움이라도 대단히 감사하겠습니다.

감사!

수락 된 답변

매퍼가 예상대로 작동하지 않는다고 생각합니다. 매퍼에 들어가서 예상대로 작동하는지 확인하십시오.


인기 답변

Auto Mappers를 사용하는 모범 사례는 Assert 문입니다 (특히 동적 개체 매핑의 경우). 이 예제를 참조하십시오. 문제를 찾는데 도움이 될 수 있습니다.

또한 Mapper 소스 코드를 살펴보면 다음과 같습니다.

public TDestination Map<TDestination>(object source, Action<IMappingOperationOptions> opts)
    {
        var mappedObject = default(TDestination);
        if (source != null)
        {
            var sourceType = source.GetType();
            var destinationType = typeof(TDestination);

            mappedObject = (TDestination)Map(source, sourceType, destinationType, opts);
        }
        return mappedObject;
    }

그것은 빈 컬렉션이 반환되면 그것은 T의 기본값을 반환하는 것 같습니다.



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