0

我在一个项目中,我无法控制数据库结构。我已经从数据库创建了我的模型,并且下面的所有表上都有外键。除了用户表之外,每个表中大约有 500k 到 1000k 行,而且它们相当宽。

使用 EF5 执行此查询需要两秒钟以上:

 var customerEngage = ctx.Customer_TB
                        .Include(c => c.Insurance_TB)
                        .Include(c => c.Insurance_TB.Select(i => i.H80Row_TB))
                        .Include(c => c.Insurance_TB.Select(i => i.WinsureRow_TB))
                        .Include(c => c.Insurance_TB.Select(i => i.User_TB))
                        .Include(c => c.Insurance_TB.Select(i => i.User_TB.Department_TB))
                        .SingleOrDefault(c => c.IDCustomer == myID);

相关表中不一定有任何行。

我可以在没有任何性能问题的情况下执行此 SQL 查询:

SELECT * 
from dim.Customer_TB c
    INNER JOIN fact.insurance_tb i on i.IDCustomer = c.IDCustomer
    LEFT JOIN fact.H80Row_TB h80 on h80.IDInsurance = i.IDInsurance
    LEFT JOIN fact.WinsureRow_TB winsure on winsure.IDInsurance = i.IDInsurance
    LEFT JOIN eb.User_TB a on i.LockedByUserID = a.IDUser
    LEFT JOIN eb.Department_TB dept on dept.IDDepartment = a.IDDepartment
WHERE c.IDCustomer = myID

首先,我的 EF 查询有问题吗?我可以制作一个 SP,但我将如何从该结果集中填充我的 POCOS?

4

2 回答 2

0

您不需要所有这些包括。

var customerEngage = ctx.Customer_TB
                        .SingleOrDefault(c => c.IDCustomer == myID);

应该做的工作。

于 2013-10-28T08:18:18.613 回答
0

将 SingleOrDefault 更改为 Where - SingleOrDefault 不一样,它确保最多一行。

您还可以检查使用 Sql Profiler 和/或发出的 sqlvar sql = ((System.Data.Objects.ObjectQuery)customerEngage).ToTraceString();

于 2013-10-28T08:13:44.733 回答