实体框架4.1 - 选择多对多关联

时间:2012-10-31 09:43:39

标签: asp.net asp.net-mvc-3 entity-framework-4.1

我使用Entity Framwork 4.1和MVC 3.我的问题是关于在Entity Framework中连接表。 我创建了三个表

  1. 用户 - UserId,用户名
  2. 角色 - 角色ID,Rolename
  3. UserInRoles- UserId,RoleId
  4. 我把这些表拉到我的edmx文件中, 只显示两个表,即两个表之间的用户和角色,多对多关联。

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

    我做了类似

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

    这不起作用。请帮忙。

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:0)

我想应该将它们联系起来:

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

默认情况下,不确定它是否会为您提供空集合。可能必须手动获取Roles集合。 (可能是result.Fetch(),但我对它不太熟悉。)

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

答案 2 :(得分:0)

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

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

在这里阅读更多相关信息: http://learnentityframework.com/LearnEntityFramework/tutorials/many-to-many-relationships-in-the-entity-data-model/