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. Разница в том, что первый возвращает список DapperRows, тогда как второй является общим Query<>, который автоматически отображает сущность.

Теперь в первом.Query() (который возвращает список DapperRows) логические свойства (бит в дБ) "FillImmediately" и "FillCompletely" являются истинными или ложными в классе, в зависимости от того, являются ли они "1" или "0". "в БД. Так что это прекрасно работает.

Однако при использовании.Query<>() оба свойства всегда имеют значение "false". Кажется, что.Query<>() не может правильно сопоставить бит с логическим значением.

Я использую последнюю версию Dapper на сегодняшний день (1.42) и SQL Server 2008

Мысли?

1 ответ

Похоже, это ошибка мульти-отображения в dapper. Попробуйте поставить идентификаторы в конце выбора после всех остальных столбцов, которые вы хотите отобразить. Например:

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
Другие вопросы по тегам