2015-05-21 43 views
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列表,而第二個是一個通用查詢,它自動映射實體。 ()返回一列DapperRows)布爾屬性(dB中的位)「FillImmediately」和「FillCompletely」在類中是true或false,取決於它們是否爲「1」 「或」0「。 因此,這工作正常。

但是,當使用.Query <>()時,兩個屬性始終爲「false」。 似乎.Query <>()無法正確地將該位映射到布爾值。

我使用的是最新版本的小巧玲瓏今天(1.42)和SQL Server 2008

思考的?

回答

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