3

我使用实体框架 4.1 和 MVC 3。我的问题是关于实体框架中的联接表。我创建了三个表

  1. 用户 - 用户 ID、用户名
  2. 角色 - 角色 ID、角色名称
  3. UserInRoles - 用户 ID、角色 ID

我将这些表拉到我的 edmx 文件中,只出现两个表,即用户和角色,两者之间存在多对多关联。

如果我想从 UserInRoles 表中获取用户的角色,方法是什么?

我做了类似的事情

var result = (from ar in roles
                          from au in users
                          where au.UserName == username
                          select new {});

这是行不通的。请帮忙。

4

3 回答 3

1

如您所料,实体框架确实将类似的简单查找表组合到父表中,以帮助您。您将无法访问代码中的查找表,但它会完成繁重的工作并允许您浏览此类表。

var result = (from ar in roles
    where ar.Users.UserName == username
    select ar);

或者,如果您更喜欢 lambdas(个人偏好):

var result = context.roles.Where(x => x.Users.UserName == username);

于 2012-10-31T12:53:59.173 回答
0

当只有一个具有一个共享主键的关系表是其他表的外键时,实体框架会在模型中自动生成多对多关系。

您可以向此表添加另一列以将其添加到您的模型中,也可以为该关系生成另一个唯一键。

在此处阅读有关此内容的更多信息:http: //learnentityframework.com/LearnEntityFramework/tutorials/many-to-many-relationships-in-the-entity-data-model/

于 2012-10-31T13:10:40.733 回答
0

我想它们应该是链接的:

var result = 
    from au in users
    where au.UserName == username
    select au.Roles;

不确定默认情况下它是否会给您一个空集合。角色集合可能必须手动获取。(可能是result.Fetch(),不过我不太熟悉。)

(或者您是否希望访问存储在数据库中的实际 UserInRole 项目?)

于 2012-10-31T12:47:17.093 回答