8
我有一个表叫PersonTable
与列:PersonId, RestarauntId, Age
为什么实体框架在从视图中选择时创建子查询?
我有一个叫PersonView
认为做:
select PersonId,
RestarauntId,
RestarauntName(RestarauntId) as `RestarauntName`,
Age
FROM PersonTable
当我做的简单的东西:
var persons = context.PersonView.Where(x=>x.PersonId == 1)
.Select(x=>
new {x.PersonId,
x.RestarauntId,
x.RestarauntName,
x.Age });
以上返回1条记录,我期望MySql查询是:
SELECT PersonId, RestarauntId, RestarauntName, Age
FROM PersonView
WHERE PersonId = 1
而是,它生成以下内容:
SELECT 1 AS `C1`, T.PersonId, T.RestarauntId, T.RestarauntName, T.Age
FROM
(SELECT PersonId, RestarauntId, RestarauntName, Age
FROM PersonView) AS T
WHERE T.PersonId = 1
所以没关系我传递给where子句,它总是会先得到所有的记录在子选择。这只发生在我查询需要的视图时,但我很好奇它为什么会创建上述查询而不是我期望它创建的查询?这是一个实体框架问题还是一个MySql问题?
MySQL是否无法针对同一计划优化两个查询?也许在运行时差异并不重要。 – usr
http://stackoverflow.com/questions/12690775/why-ef-generating-a-sub-query-for-a-simle-query –
我不知道它是否有帮助,但EF不会使用关键信息在视图上确定联接类型。它只在表格上选择使用内部连接,而不是在视图上。 – Brannon