C# 如何使用实体框架c显示表中有外键的三个表的值?

C# 如何使用实体框架c显示表中有外键的三个表的值?,c#,entity-framework,C#,Entity Framework,大家好,我是entity和asp.net M.V.C的新手,我正在使用entity框架代码优先的方法处理已经生成的数据库,我想使用内部联接在一个表中显示三个表的数据,但不知道如何做 我已经尝试了下面给出的代码 public List<NewGroupRoles> GetAllGroups() { try { using(var p=new VMSDBContext()) {

大家好,我是entity和asp.net M.V.C的新手,我正在使用entity框架代码优先的方法处理已经生成的数据库,我想使用内部联接在一个表中显示三个表的数据,但不知道如何做

我已经尝试了下面给出的代码

 public List<NewGroupRoles> GetAllGroups()
    {

        try
        {
            using(var p=new VMSDBContext())
            {
                var group = (from group_role in p.group_roles
                             join groups in p.groups on group_role.group_id equals groups.group_id
                             join roles in p.roles on group_role.roles_id equals roles.role_id
                             select new
                             {
                                 Id = group_role.group_roles_id,
                                 group_name = groups.group_name,
                                 group_role = roles.role_name
                             }).ToList();


            }

        }
        catch(Exception ex)
        {
            return new List<NewGroupRoles>();
        }
    }
我想从模型中的函数返回它

模型类是

[这是组角色类


使用此选项,因为在选择时需要有新对象

public List<NewGroupRoles> GetAllGroups()
            {

                try
                {
                    using(var p=new VMSDBContext())
                    {
                        var group = (from group_role in p.group_roles
                                     join groups in p.groups on group_role.group_id equals groups.group_id
                                     join roles in p.roles on group_role.roles_id equals roles.role_id
                                     select new NewGroupRoles()
                                     {
                                         Id = group_role.group_roles_id,
                                         group_name = groups.group_name,
                                         group_role = roles.role_name
                                     }).ToList();


                    }

                }
                catch(Exception ex)
                {
                    return new List<NewGroupRoles>();
                }
       return group;
}

你正在努力工作,EF应该为你做的

看起来您在组和角色表之间有多对多关系。为什么不删除group_roles类并只定义导航属性呢

public virtual IEnumerable<roles> roles { get; set; }
在角色模型类中

并以某种方式获取组和角色列表,如下所示:

var groupRoles = p.groups.SelectMany(g=>g.roles, (g,r)=>new {Group = g.group_name, Role = r.role_name}).ToList();
public class group_roles
{
    [Key]
    public int group_roles_id { get; set; }

    [ForeignKey("groups")]
    public int group_id { get; set; }

    [ForeignKey("roles")]
    public int role_id { get; set; }

    public virtual groups group { get; set; }
    public virtual roles role { get; set; }
}
或者,如果您使用EF Core,它不支持没有中间模型类的多对多关系,或者只是坚持在您的模型中有一个中间类组角色,那么您可以在其中定义两个导航属性,如下所示:

var groupRoles = p.groups.SelectMany(g=>g.roles, (g,r)=>new {Group = g.group_name, Role = r.role_name}).ToList();
public class group_roles
{
    [Key]
    public int group_roles_id { get; set; }

    [ForeignKey("groups")]
    public int group_id { get; set; }

    [ForeignKey("roles")]
    public int role_id { get; set; }

    public virtual groups group { get; set; }
    public virtual roles role { get; set; }
}
那么您的查询就是

var groupRoles = p.group_roles.Select(gr=> new {gr.group_roles_id, Group=gr.group.group_name, Role=gr.role.role_name).ToList();

如何将此绑定到列表以返回它定义实体的模型类是什么EF是ORM。您定义实体及其关系,EF负责生成联接。您永远不会返回该列表。如果要返回NewGroupRoles对象,则应使用select new GroupRoles{…}现在您正在使用新的{…}创建匿名类型如何将数据库中的值设置为newgrouproles对象,因为它没有设置特定的值。这看起来与问题代码几乎相同。有什么变化?如果答案明显,则仅代码答案可能是可以接受的,但此答案与我在选择新组角色时使用的答案不同selecting@AbhishekSharma这是身份证当你在编辑之前发布你的答案的时候,请点击。这应该有什么帮助?请写在问题中。不要让人们猜测。顺便说一句,如果你不返回答案,没有任何帮助results@AbhishekSharma但你的答案并不是这样。请检查。如果你想说OP应该创建正确类型的对象并返回它们,请写下来。如果我删除了在数据库中存储组及其角色的组角色表?@Hafizumer,不要期望人们将您的答案与原始答案区分开来,以理解您的意思。在SQL数据库中,您应该有一个带有相应外键的组角色表。但是,如果您使用的是EF.NET not Core,则不能在数据库中有一个中间表模型。即使您先使用代码,EF也会为您创建此表并在后台使用。在EF Core中,模型中必须存在group_roles表,但您仍然应该使用导航属性,而不是自行设计的复杂多任务查询。是的,我已经更正了一点答案。请删除group_roles表,而不是group_role表从您的数据模型中删除类