【发布时间】:2016-03-07 20:21:56
【问题描述】:
我们数据库中的一个订单有大量记录(> 500,000)。当我试图获取所有记录并将它们映射到域模型时,它需要永远(linq 调用)。下面的示例代码将描述我所做的...
int OrderId = 123456;
int pagesize = 100;
using (var dbContext = new MyDbContext())
{
var orderDetails = dbContext.orderDetailEntity
.Where(i => i.Orders.OrderID == OrderId)
.OrderBy(o => o.orderDetailStatus);
var orderDetailModel = Mapper
.Map<IEnumerable<OrderDetailModel>>(orderDetails.Take(PageSize));
}
更多信息 Orders 实体和 OrderDetail 实体有关系。因此,在上述查询中,我试图获取特定的所有 OrderDetail。但它会永远占用大量数据(超过 50 万条记录)。
你知道如何解决这个问题吗? 真的很感谢你
提前谢谢你。
【问题讨论】:
-
不要将代码放入 cmets,edit your question 并将信息放在那里。此外,如果您将 Automapper 与 EntityFramework 一起使用,则不应使用
Mapper.Map,而应使用 Queryable Extenstions。orderDetailModel = orderDetails.Take(PageSize).ProjectTo<OrderDetailModel>().ToList(); -
你检查生成的SQL和查询执行计划了吗?您是否尝试过直接针对数据库运行该 SQL 并衡量其性能?
-
你有延迟加载吗?我在 automapper 和延迟加载方面有过不好的体验 - 即 automapper 会触发导航属性加载
-
@Scott Chamberlain 问题出在 linq 调用上(Where 子句)
-
你确定瓶颈是 EF 吗?您是否附上了个人资料以查看花费最多的时间?
标签: c# linq visual-studio asp.net-mvc-4 entity-framework-6