我正在努力解决这个问题。我正在使用MVC 4和Code First Entity Framework。我有三节课。它们是用户,角色和项目。用户可以拥有许多项目,对于特定项目,用户可以拥有特定角色。我正在使用联结表来组合这三个表。以下是连接表的示例:
public class UserRolesinProject
{
[Key, Column(Order = 0)]
public int UserId { get; set;}
[Key, Column(Order = 1)]
public int RoleId { get; set;}
[Key, Column(Order = 2)]
public int ProjectId { get; set;}
}
以下是每个类的样本
public class DBUser
{
[Key]
public int UserId { get; set;}
public string UserName { get; set;}
public virtual ICollection< UserRolesinProject > Roles { get; set; }
}
public class DBRole
{
[Key]
public int RoleId { get; set;}
public string RoleName { get; set;}
public virtual ICollection< UserRolesinProject > Projects { get; set; }
}
public class Project
{
[Key]
public int ProjectId { get; set;}
public string ProjectName { get; set;}
public virtual ICollection< UserRolesinProject > Users { get; set; }
}
最后是上下文类的示例
Public DBSet<DBUser>Users {get; set;}
Public DBSet<DBRoles>Roles {get; set;}
Public DBSet<Project>Projects {get; set;}
Public DBSet<UserRolesInProject>UserRolesProjects {get; set;}
因此,当我使用包管理器控制台更新数据库时,此构建和表创建。我想要实现的是如果我从用户那里做一个LINQ语句我想要检索用户被分配到的所有项目以及相应的角色。现在,我只是获取每个字段的ID,它来自联结表和我在每个单独的类中对映射表执行的映射。我认为结果将是他们都将加入。我究竟做错了什么?我搜索并查看了不同的例子,但它们都是两个PK列而不是三个。我的桌子错了吗?我是否以低效的方式设置它们?在此先感谢您的帮助。