【问题标题】:asp.net - Access Many-to-Many relationship propertiesasp.net - 访问多对多关系属性
【发布时间】:2019-12-30 14:19:32
【问题描述】:

我正在做一个练习,其中一部分需要我做一个按钮,将用户的角色从User 更改为subbed user。我使用的表是Roles (Id, Title)Users (Id, name, etc, ),它们通过多对多关系连接,因此我尝试使用u.Roles.FirstOrDefault().Title 行访问每个用户的属性标题,如下所示:

public void ChangeRoleFromUserToSubscribedUser(User u)
{
    u.Roles.FirstOrDefault().Title = "Subscribed User";

    Entity.SaveChanges();
}

还有获取用户的then方法:

public ActionResult Change(string email)
{
    UsersRepository ur = new UsersRepository();
    var user = ur.GetUser().SingleOrDefault(x => x.Email == email);

    ur.ChangeRoleFromUserToSubscribedUser(user);
    return RedirectToAction("List");
}

现在,我尝试更改某个用户的名称(我们称他为 bob)并且它成功了,但是,当我使用上面的代码时,当我按下按钮时,Bob 的角色并没有从 @987654328 改变@到Subscribed user。相反,表 Roles 中的标题从 User 更改为 Subscribed User

请问我做错了什么?

【问题讨论】:

    标签: c# ssms relationship


    【解决方案1】:

    你可以试试这个方法

    public void ChangeRoleFromUserToSubscribedUser(User u)
    {
        var role = u.Roles.FirstOrDefault();
        role.Title = "Subscribed User";
        Entity.Entry(role).State = EntityState.Modified;
    
        Entity.SaveChanges();
    }
    

    更新

    您需要更新UserRoles 而不是Roles 表。

    【讨论】:

    • 感谢您的回复。括号“实体”内的变量究竟是什么?抱歉,对这些东西不熟悉..
    • 它是role 而不是entity
    • 我厌倦了它,它导致了相同的结果。而不是改变用户的角色,角色表中的角色标题“用户”改变了......
    • 问题是我没有访问特定用户的角色,我访问的是角色表中的角色标题
    • 你为什么不给我们你的类RolesUser的结构?
    【解决方案2】:

    下面一行

    u.Roles.FirstOrDefault().Title = "Subscribed User";
    

    正在选择分配给用户的角色对象,然后将角色的标题更改为“订阅用户”。具体来说,您正在将标题为“用户”的角色更改为“订阅用户”,这不是您想要的。

    您希望将用户的角色设置为现有实体对象,如下所示(我假设有一个未定义的 RoleRepository):

    var newRole= new RoleRepository().GetRole("Subscribed User");
    var oldRole = u.Roles.First(x => x.Title == "User");
    u.Roles.Remove(oldRole);
    u.Roles.Add(newRole);
    

    【讨论】:

    • 感谢您的回复。请问我将如何处理 GetRole 方法?因为我仍然不知道如何访问选定用户字段的角色。
    • 这取决于您访问角色实体的方式。如果您使用的是存储库设计,您可以创建一个类似于您已有的 UserRepository 的 RoleRepository,然后直接访问 Roles 实体表并搜索您想要的特定角色(在本例中为“订阅用户”)。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    • 2020-10-23
    • 2016-12-03
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多