我有以下代码:
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”在类中为true或false,具体取决于它们是“1”还是“0” “在DB中。所以这很好。
但是,使用.Query <>()时,两个属性始终为“false”。似乎.Query <>()无法正确地将该位映射到布尔值。
我正在使用最新版本的Dapper(1.42)和SQL Server 2008
思考?
这似乎是多映射到精巧的错误。尝试在所有其他要映射的列之后将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