簡體   English   中英

如何使用實體框架c#顯示與表中關聯的外鍵的三個表的值?

[英]how to show values of three table with foreign key associated in table using entity framework c#?

您好所有我對實體和asp.net MVC都是陌生的我正在使用實體框架代碼優先方法與已經建立的數據庫,我想使用內部聯接在一個表中顯示三個表數據,並且困惑該怎么做

我已經嘗試了下面給出的以下代碼

 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>();
        }
    }

我想從模型中的函數返回它

模型類是定義所有數據庫實體類的類

這是一張桌子

[這是小組角色類] [3]

角色類

您正在嘗試做EF應該為您做的工作。

看起來您在groupsroles表之間具有多對多關系。 為什么不刪除group_roles類並只定義導航屬性

public virtual IEnumerable<roles> roles { get; set; }

groups模型課上

public virtual IEnumerable<groups> groups { get; set; }

roles模型類

並以某種方式獲取組和角色的列表:

var groupRoles = p.groups.SelectMany(g=>g.roles, (g,r)=>new {Group = g.group_name, Role = r.role_name}).ToList();

或者,如果您使用的EF Core在沒有中間模型類的情況下仍不支持多對多關系,或者僅堅持在模型中具有中間類group_roles ,則可以在其中定義兩個導航屬性,如下所示:

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();

使用此選項,因為在選擇時需要有新對象

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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM