Asp.Net LINQ结合了三个表

时间:2016-03-22 17:49:30

标签: c# mysql asp.net .net linq

我想在我的视图中显示三列:

[[  2.23903250e-08 -1.29444679e-07j]]
[[  6.09565057e-07 +2.09702260e-07j]]
[[  3.40257465e-07 -1.20382176e-07j]]

所以最初我的想法是

我可以====================================== UserName | Email | Role Name ====================================== codelover12 code@g.g Student kimmy45634 kimy@c.c Teacher ====================================== Id表格中AspNetUsers加入UserId表格中的AspNetUserRoles,也可以加入Id AspNetRoles中的var model = from users in db.Users join userRoles in db.AspNetUserRoles on users.Id equals roles.UserId join role in db.Roles on role.Id equals userRoles.RoleId select new { users.UserName, users.Email, role.Name }; 谁具有哪个角色。

我是这样想的:

{{1}}

但我发现我无法访问AspNetUserRoles。 我很感激你的帮助。

2 个答案:

答案 0 :(得分:1)

好吧,我明白了。

最简单的方法是将这行代码添加到IdentityModels.cs

public DbSet<IdentityUserRole> UserRoles { get; set; }

然后你现在可以访问AspNetUserRoles,并编写像

这样的代码
var findRole = (from userRole in db.UserRoles
                join role in db.Roles on
                userRole.RoleId equals role.Id
                where userRole.UserId == Id
                select role.Name).ToList();

希望这可以帮助其他有类似问题的人。

答案 1 :(得分:0)

EF自动创建交叉表AspNetUserRoles。所以,你可以使用导航属性或像这样做:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{    
    modelBuilder.Entity<AspNetUser>()
        .HasMany(x => x.Roles)
        .WithMany(x => x.AspNetUsers)
    .Map(x =>
    {
        x.ToTable("AspNetUserRoles"); // third table is named Cookbooks
        x.MapLeftKey("AspNetUserId");
        x.MapRightKey("RoleId");
    });
}