为什么 dapper return 会正确计数和空值?

Why would dapper return correct count and null values?

我想尝试一下 dapper,因此创建了两个代表数据库的 类 和一个小的内部连接查询,但无论出于何种原因,结果都是空值。我是 dapper 的新手,所以根据我在文档中阅读的内容和关于 SO (How do I write one to many query in Dapper.Net?) 的一个很好的答案,看来我的设置是正确的。为什么结果计数是正确的,但值都是空的?

 con.Open();
    string query = @"select Orders.OrderID as OrderID,
                     Orders.OrderNumber as Orders_OrderNumber,
                     Product.ProductNumber as Product_ProductNumber,
                     Product.ProductID as Product_ProductID,
                     Product.OrderID as Product_OrderID
                     from Orders INNER JOIN Product ON Orders.OrderID = Product.OrderID WHERE Orders.OrderNumber LIKE '%" + orderNumber + "%'";
    dynamic data = con.Query<dynamic>(query);
    Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Orders), new List<string> { "OrderID" });
    Slapper.AutoMapper.Configuration.AddIdentifiers(typeof(Product), new List<string> { "ProductID" });

    var orders = (Slapper.AutoMapper.MapDynamic<Orders>(data) as IEnumerable<Orders>).ToList();
    //var orders = Slapper.AutoMapper.Map<Orders>(data);
    return orders; // count is correct but values are null

类:

 public class Product
    {
        public int ProductID { get; set; }
        public int OrderID { get; set; }
        public string ProductNumber { get; set; }
    }

 public class Orders
    {
        public int OrderID { get; set; }
        public string OrderNumber { get; set; }
        public List<Product> Products { get; set; }
    }

如有任何帮助,我们将不胜感激。

谢谢!

我想你的映射器没有按预期工作。进入您的映射器并确保它按预期工作。

好像是 Orders.OrderNumber as Orders_OrderNumber 故障点。试试 Orders.OrderNumber as OrderNumber.

使用自动映射器的最佳实践是断言语句,尤其是在动态对象映射的情况下。看到这个 example。可能会帮你找到问题。

此外,查看下面的 Mapper 源代码:

public TDestination Map<TDestination>(object source, Action<IMappingOperationOptions> opts)
    {
        var mappedObject = default(TDestination);
        if (source != null)
        {
            var sourceType = source.GetType();
            var destinationType = typeof(TDestination);

            mappedObject = (TDestination)Map(source, sourceType, destinationType, opts);
        }
        return mappedObject;
    }

当空集合被 returned 时,它似乎会 return T 的默认值。