Dapper> Le mappage multi ne parvient pas à mapper correctement le bit à booléen

dapper multi-mapping

Question

J'ai le code suivant:

        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>();

Les deux "connection.Query" exécutent le même SQL. La différence est que le premier retourne une liste de DapperRows alors que le second est une requête générique <> qui mappe automatiquement l'entité.

Maintenant, dans le premier .Query () (qui retourne une liste de DapperRows), les propriétés booléennes (bit dans le dB) "FillImmediately" et "FillCompletely" sont vraies ou fausses dans la classe selon qu'elles sont "1" ou "0 "dans la DB. Donc ça marche bien.

Cependant, lorsque vous utilisez le fichier .Query <> (), les deux propriétés sont toujours "false". Il semble que le fichier .Query <> () ne puisse pas mapper correctement le bit à booléen.

J'utilise la dernière version de Dapper à ce jour (1.42) et SQL Server 2008

Pensées?

Réponse populaire

Cela semble être un bug de multi-mapping vers dapper. Essayez de mettre les identifiants à la fin de select, après toutes les autres colonnes que vous souhaitez mapper. Par exemple:

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


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi