实体框架多对多关系问题

本文关键字:问题 关系 实体 框架 | 更新日期: 2023-09-27 18:01:51

我有3个表:

-Users (UserId(pk), Email, Password)
-Roles (RoleId(pk), RoleDescription)
-UsersInRole (UserId(pk), RoleId(pk))

我在DB中定义了Users->UsersInRole和Roles->UsersInRole关系。当我在Visual Studio中创建edmx文件时,它只显示了两个类:由多对多关系连接的用户和角色(UsersInRole表没有显示为类,我猜是因为该表是为了打破多对多数据库问题)。

现在,我试图定义一个方法,给定一个角色,它应该返回一个用户列表。这行不通:

public List<User> usersPerRole(string role)
    {
        return from u in entities.Roles where u.RoleID == role select u.Users.ToList();
    }

有没有人能给我一个正确的方法来做这件事的例子?

谢谢,

实体框架多对多关系问题

耦合表"UsersInRole"(除了两个外键共同构成表的主键外,没有其他任何外键)将被转换为外键"两侧"的导航属性。在用户和角色实体中。在Users中,它将是User。在Roles中,它将是Role.UsersWithThisRole。在耦合表中添加任何补充列将导致该表的特定实体,并丢失所解释的导航属性。

对于你的问题,你可以简单地输入:

public List<User> usersPerRole(string role)
{
 using(Entities context is new Entities())
 {
  return context.Role.FirstOrDefault<Role>(r => r.ID == role).Include("UsersInRole")
 }
}

您需要这样的东西(我希望您在Role实体上有Users导航属性):

public List<User> UsersPerRole(string role)
{
     return entities.Roles
                    .Where(r => r.RoleId == role)
                    .SelectMany(r => r.Users)
                    .ToList();
}

你可以不使用lambdas重写相同的代码:

public List<User> UsersPerRole(string role)
{
     return (from r in entities.Roles
             from u in r.Users
             where r.RoleId == role
             select u).ToList();
}