Dapper>多映射无法正确映射位到布尔值

时间:2015-05-21 03:16:13

标签: 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>();

两个&#34; connection.Query&#34;执行相同的SQL。不同之处在于,第一个返回DapperRows列表,而第二个返回通用Query&lt;&gt;多重自​​动映射实体。

现在,在第一个.Query()(返回DapperRows列表)布尔属性(dB中的位)&#34; FillImmediately&#34;和&#34; FillCompletely&#34;在课堂上是真是假,取决于它们是&#34; 1&#34;或&#34; 0&#34;在DB中。 所以这很好。

然而,当使用.Query&lt;&gt;()时,两个属性总是&#34; false&#34;。 似乎.Query&lt;&gt;()无法正确地将该位映射到布尔值。

我今天使用最新版本的Dapper(1.42)和SQL Server 2008

思想?

1 个答案:

答案 0 :(得分:1)

这似乎是多映射到精巧的错误。尝试在所有其他要映射的列之后将id放在select的末尾。例如:

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