asp.net - 访问 Many-to-Many 关系属性
asp.net - Access Many-to-Many relationship properties
我正在做一个练习,其中一部分要求我做一个按钮,将用户的角色从 User
更改为 subbed user
。我使用的 table 是 Roles (Id, Title)
和 Users (Id, name, etc, )
,它们通过 many-to-many 关系连接,因此我尝试访问每个用户的 属性 标题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 的角色并没有改变User
到 Subscribed user
。相反,table Roles
中的标题从 User
更改为 Subscribed User
。
请问我做错了什么?
你可以这样试试
public void ChangeRoleFromUserToSubscribedUser(User u)
{
var role = u.Roles.FirstOrDefault();
role.Title = "Subscribed User";
Entity.Entry(role).State = EntityState.Modified;
Entity.SaveChanges();
}
已更新
您需要更新 UserRoles
而不是 Roles
table。
下面一行
u.Roles.FirstOrDefault().Title = "Subscribed User";
正在选择分配给用户的角色 object,然后将角色的标题更改为 "Subscribed User"。具体来说,您正在将标题为 "User" 的角色更改为 "Subscribed User",这不是您想要的。
您想将用户角色设置为现有实体 object,如下所示(我假设有一个未定义的 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);
我正在做一个练习,其中一部分要求我做一个按钮,将用户的角色从 User
更改为 subbed user
。我使用的 table 是 Roles (Id, Title)
和 Users (Id, name, etc, )
,它们通过 many-to-many 关系连接,因此我尝试访问每个用户的 属性 标题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 的角色并没有改变User
到 Subscribed user
。相反,table Roles
中的标题从 User
更改为 Subscribed User
。
请问我做错了什么?
你可以这样试试
public void ChangeRoleFromUserToSubscribedUser(User u)
{
var role = u.Roles.FirstOrDefault();
role.Title = "Subscribed User";
Entity.Entry(role).State = EntityState.Modified;
Entity.SaveChanges();
}
已更新
您需要更新 UserRoles
而不是 Roles
table。
下面一行
u.Roles.FirstOrDefault().Title = "Subscribed User";
正在选择分配给用户的角色 object,然后将角色的标题更改为 "Subscribed User"。具体来说,您正在将标题为 "User" 的角色更改为 "Subscribed User",这不是您想要的。
您想将用户角色设置为现有实体 object,如下所示(我假设有一个未定义的 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);