实体框架多对多关系问题
本文关键字:问题 关系 实体 框架 | 更新日期: 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();
}