为什么 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 的默认值。
我想尝试一下 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 的默认值。