1

我有以下代码:

        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 列表)中,布尔属性(dB 中的位)“FillImmediately”和“FillCompletely”在类中是真还是假,具体取决于它们是“1”还是“0” “在数据库中。所以效果很好。

但是,当使用 .Query<>() 时,这两个属性始终为“假”。似乎 .Query<>() 无法正确地将位映射到布尔值。

截至今天,我正在使用最新版本的 Dapper (1.42) 和 SQL Server 2008

想法?

4

1 回答 1

2

这似乎是多映射到 dapper 的错误。尝试将 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
于 2016-03-21T13:55:41.920 回答