Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 实体框架4.1-选择多对多关联_Asp.net_Asp.net Mvc 3_Entity Framework 4.1 - Fatal编程技术网

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

Asp.net 实体框架4.1-选择多对多关联,asp.net,asp.net-mvc-3,entity-framework-4.1,Asp.net,Asp.net Mvc 3,Entity Framework 4.1,我使用实体框架4.1和MVC 3。我的问题是关于实体框架中的联接表。 我创建了三个表 用户-用户ID,用户名 角色-角色Id,Rolename UserInRoles-UserId,RoleId 我把这些桌子放到我的edmx文件里, 仅显示两个表,即两个表之间存在多对多关联的用户和角色 如果我想从UserInRoles表中获取用户的角色,方法是什么 我做了一些类似的事情 var result = (from ar in roles from a

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

  • 用户-用户ID,用户名
  • 角色-角色Id,Rolename
  • UserInRoles-UserId,RoleId
  • 我把这些桌子放到我的edmx文件里, 仅显示两个表,即两个表之间存在多对多关联的用户和角色

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

    我做了一些类似的事情

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

    这是行不通的。请帮助。

    我想它们应该链接到:

    var result = 
        from au in users
        where au.UserName == username
        select au.Roles;
    
    不确定默认情况下是否会给您一个空集合。可能必须手动获取角色集合。(可能是result.Fetch(),但我对它不太熟悉。)


    (或者您是否需要访问存储在数据库中的实际UserInRole项?

    正如您所猜测的,实体框架确实将类似这样的简单查找表合并到父表中,以帮助您解决问题。您将无法访问代码中的查找表,但它将完成繁重的工作,并允许您像这样在表中导航

    var result = (from ar in roles
        where ar.Users.UserName == username
        select ar);
    
    或者如果您更喜欢lambdas(个人偏好):


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

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

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

    请在此处阅读更多信息: