实体框架中的多个查询而不是一个

时间:2014-04-29 15:19:13

标签: c# entity-framework

对此感到抱歉 - 我是实体框架的新手,我在其他任何地方都没有找到答案。

我有2个表,用户和角色,有多对一的关系。

使用SQL获取用户角色名称我会这样做:

SELECT r.Name 
FROM Role r
INNER JOIN User u ON u.RoleID = r.ID
WHERE u.UserName = 'someusername'

所以在EF中,我认为我应该能够做到这样的事情:

string role = context.Users.Single(u => u.UserName == username).Role.Name;

这很好用,但是当代码运行时,它会在SQL服务器上执行2个查询 - 一个用于从用户表中获取用户,另一个用于从角色表中获取角色。与上面的SQL代码相比,这看起来非常沉重,所以我想知道如何使它更高效并在单个查询中执行。

由于

1 个答案:

答案 0 :(得分:1)

如果没有看到你的模型,告诉它是否正确有点棘手,但你可以在1个查询中做到这一点,如下所示:

string role = context.Users.Where(u => u.Username == username).Select(u => u.Role.Name).FirstOrDefault();

在调用FirstOrDefault之前,代码不会运行任何SQL。

在您的方案中,通过调用Single,您正在SQL中执行用户名检查,然后其他属性正在延迟加载。