实体框架6 - MySQL查询生成不必要的SQL

时间:2015-12-04 15:14:23

标签: c# mysql entity-framework linq

这是我第一次使用EF 6和MySQL。我在使用连接更新LINQ语句时使用导航属性来获取相关数据时遇到了麻烦。

以下是我正在执行以获取用户和所有用户位置的声明。

AspNetUsers.Include("UserLocations")
.Select(u => new { 
    FullName = u.FullName, 
    Locations = u.UserLocations.Select(l => l.Title)
})

此语句使用LinqPad4生成以下SQL:

Unnecessary SQL

为什么它使用select语句加入而不是在表本身上进行连接,为什么当所需的唯一列是Title时,它会将所有位置列添加到连接中?

以下SQL查询不会更好:

SELECT
   u.FullName,
   l.Title
FROM AspNetUsers u
   JOIN UserLocations ul ON u.Id = ul.UserId
   JOIN Locations l ON ul.LocationId = l.LocationId;

这是我第一次使用EF,我已经读过,过去生成的SQL并不是那么好。如果这只是其中一种情况,或者我可以做些什么来最小化生成的SQL,我就会徘徊。

提前谢谢!

0 个答案:

没有答案