经典的User-UserRole-Role示例
UserProfile 类:
public class UserProfile
{
public int Id { get; set; }
public String UserName { get; set; }
public virtual List<Role> Roles { get; set; }
}
角色类:
public class Role
{
public int Id { get; set; }
public string Name { get; set; }
public virtual List<UserProfile> Users { get; set; }
}
使用其他FluentAPI
映射:
modelBuilder.Entity<Role>()
.HasMany(p => p.Users).WithMany(u => u.Roles)
.Map(m =>
m.MapLeftKey("RoleId").MapRightKey("UserId").ToTable("UserInRole"));
实体框架代码首先生成数据库表UserProfile
,Role
和UserInRole
。 UserInRole
表仅包含RoleId
和UserId
个密钥。
问题/需要:我需要一个与其角色配对的用户列表,但仅限于特定的用户和角色列表。
我通过首先获取用户然后获得他们的角色来解决这个问题,但似乎性能要低得多(因为它似乎会多次往返DBMS)。
在SQL中,我会这样做:
select u.UserName, r.Name from UserInRole as ur
left outer join UserProfile as u on ur.UserId = u.Id
left outer join Role as r on ur.RoleId = r.Id
where u.Id in (1, 2, 3) and r.Id in (1, 2, 3, 4, 5)
如果可能,我该如何在EntityFramework中执行此操作?(请注意,我没有在Code First中映射联结表UserInRole
?)无我试过的LINQ查询从联结表生成了两个左外连接,据我所知,这将是最快的方法。如果我错了,请纠正我。