实体框架使用外键从表中检索数据

时间:2014-02-04 16:42:16

标签: c# sql linq entity-framework linq-to-entities

我的SQL Server数据库RolePermissionRolePermission中有3个表。

RolePermission由两列qRoleqPermission组成,这两列是其他两个表的外键。

因此,当Entity Framework为其创建模型时,它只创建两个类,并将RolePermission的虚拟属性添加到每个角色和权限类中。

现在我需要从RolePermission中选择列,所以我写了这段代码:

var rolePermission = PREntitiy.Roles.Where(r => r.qRole == TxtRole.Text)
                                    .Select(p => p.Permissions);

这样做我可以访问rolePermission表但是我需要从单个查询中的角色表和rolePermission中的某些列中检索一些列,就像我们在SQL中的join语句中所做的那样。

换句话说,我需要一个linq查询来访问角色表中的一些列,一些来自rolePermission,但是我需要在一个linq查询中执行它,就像SQL中的join语句一样。

由于

2 个答案:

答案 0 :(得分:21)

您正在寻找.Include()声明

http://msdn.microsoft.com/en-us/data/jj574232.aspx

var role = PREntitiy.Roles.Include(r=>r.Permission).Where(r => r.qRole == TxtRole.Text)

我没有你的所有课程,因此Permission属性可能不正确。

您可以使用正常的点符号访问每个类的属性:

var x = role.name;
var y = role.Permission.Name;

答案 1 :(得分:0)

@BlackICE的建议对我很有帮助。这不完全一样,但是我有一个类似的问题。我有三个表,用户(用户名,密码),角色(角色ID,角色名称)和用户角色(用户名称,角色ID)。最后一个由其他两个的密钥组成。为了获得角色,给定用户名,我必须执行以下操作。我不知道这是否适当/不合适,但对我有用:)。

IQueryable<User> IQUsers = _dbContext.Users.Include(u => u.Roles).Where(u => u.Username == username);
User _user = IQUsers.FirstOrDefault<User>();
Role _role = _user.Roles.FirstOrDefault<Role>();
roleName = _role.RoleName;