为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 MVC 中使用 DB First 方法从 Junction Table 获取数据

如何在 MVC 中使用 DB First 方法从 Junction Table 获取数据

C#
胡说叔叔 2022-12-04 13:06:56
我有 2 个表之间的多对多关系,我想从联结表中检索数据。我先分享一些资源数据库表的图像:https://imgur.com/BDvPiQaEF 模型实体的图像:https://imgur.com/mFHPjfN调试时的错误图像:https://imgur.com/lL7DE72我正在使用以下规则或策略+数据库优先方法+EF图+自定义角色提供者问题是,当我尝试从连接表 (user_has_role) 检索数据时,我得到的是 SQL 查询而不是数据。###我得到的 SQL 查询:选择 \r\n [Extent1].[user_id] AS [user_id],\r\n [Extent2].[user_role_name] AS [user_role_name]\r\n FROM [dbo].[user_has_role] AS [Extent1]\r \n INNER JOIN [dbo].[user_role] AS [Extent2] ON [Extent1].[user_role_id] = [Extent2].[user_role_id]这是一些代码角色提供者类派生自 RoleProvider 类public class AppRolesProvider : RoleProvider所有方法都被覆盖但仅与public override string[] GetRolesForUser(string username)        {            //get all user data from user table for id based on user email            var _user = db.users.Where(u => u.user_email == username).FirstOrDefault();           var _role = (from s in db.users                         where (                           from c in s.user_role                           where s.user_id == _user.user_id                           select c                           ).Any()                         select s).ToString();            string[] roleName = { _role };               if (roleName != null)            {                return roleName;            }            else            {                roleName = null;                return roleName;            }        }我想要针对用户的实际角色名称(一个用户有很多角色,也可能只有一个)
查看完整描述

1 回答

?
慕码人2483693

TA贡献1860条经验 获得超9个赞

联结表未包含在 Entity Framework 中,因为它没有主键。您通过向联结表添加主键然后更新您的 Edmx 文件来解决此问题。


更新模型后,您可以使用简单的 linq 查询从联结表中检索数据。


两种情况的区别:


1) 如果您的联结表不包含主键,EF 将生成具有多对多关系的两个类

2) 如果您的联结表包含主键,EF 将生成 3 个类: Junction table in one to many relation with用户和具有 user_role 的一对多


更新

请试试这个:


public override string[] GetRolesForUser(string username)

    {

        //get all user data from user table for id based on user email

        int _user_id = Convert.ToInt32(db.users.Where(u => u.user_email == username).Select(i => i.user_id).FirstOrDefault());


        // Get role from user_has_role against user id

        var _role = db.user_has_role.Where(r => r.user_id == _user_id).Select(r => r.user_role.user_role_name);


        // store selected

        string[] roleName = _role.ToArray();


        if (roleName != null)

        {

            return roleName;

        }

        else

        {

            roleName = null;

            return roleName;

        }

    }


查看完整回答
反对 回复 2022-12-04
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信