Dapper> 다중 매핑이 비트를 부울로 올바르게 매핑하지 못함

dapper multi-mapping

문제

다음 코드가 있습니다.

        string sql = "SELECT * FROM orders o " +
                     "INNER JOIN users u ON o.user_id = u.id " +
                     "WHERE o.ticker = @ticker AND o.user_id = @user_id";

        var _orders = connection.Query(sql, new { ticker = ticker, user_id = userId });

        IEnumerable<Order> orders = connection.Query<Order, User, Order>(sql,
                                        (o, u) =>
                                        {
                                            u.Id = u.Id.Trim();
                                            Order order = new Order(o.Ticker.Trim(), u, o.Type, o.Quantity, o.Price, o.IsMarketOrder, o.ExpirationDate, o.FillCompletely, o.FillImmediately);
                                            return order;
                                        },
                                        new { ticker = ticker, user_id = userId }
                                        );

        return orders.ToArray<Order>();

두 개의 "connection.Query"는 동일한 SQL을 실행합니다. 차이점은 첫 번째는 DapperRow 목록을 반환하고 두 번째 쿼리는 엔터티를 자동으로 매핑하는 일반 쿼리 <>입니다.

이제 첫 번째 .Query () (DapperRows 목록을 반환)에서 "FillImmediately"및 "FillCompletely"의 부울 속성 ( "dB"비트)이 "1"또는 "0"인지에 따라 클래스에서 true 또는 false가됩니다. "DB에. 그래서 잘 작동합니다.

그러나 .Query <> ()를 사용할 때 두 속성은 항상 "false"입니다. .Query <> ()는 비트를 부울로 올바르게 매핑 할 수 없습니다.

저는 Dapper의 최신 버전 (1.42)과 SQL Server 2008을 사용하고 있습니다.

생각?

인기 답변

이것은 dapper에 대한 다중 매핑의 버그 인 것 같습니다. Select를 끝내고 다른 모든 열을 매핑하려는 후에 ID를 넣으십시오. 예 :

SELECT o.Status, u.Name, u.FillCompletely, u.FillImmediately, -- the trick ids in the end -> u.user_id, o.order_id FROM orders o INNER JOIN users u ON o.user_id = u.id WHERE o.ticker = @ticker AND o.user_id = @user_id


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