我创建了一个函数来更新数据库中的记录:
Users (UserId, Name)
UsersRoles (UserId, RoleId)
Roles (RoleId, Name)
我将parameter_user和parameter_role传递给函数。 如果它们位于相应的表中,则更新数据。 但是,它不会更新数据,而是每次都将它们放入。
因此,如果表UsersRoles看起来像这样:
10 25
10 23
10 28
11 25
11 32
我想更新第10行到第27行27,它增加了一个记录10 27,但它留下了10 23。 我想你不能改变,因为它是一个双FK。 但是如何删除旧记录10 23?
功能是这样的:
var user = (from r in context.Users where r.UserId.Equals(parameter_user) select r).FirstOrDefault();
Roles role;
if (parameter_role > 0)
{
role = (from r in context.Roles where r.RoleId.Equals(parameter_role) select r).FirstOrDefault();
if (role == null) return false;
if (user != null)
{
role.Users.Add(user);
}
role.Name = "Paul";
}
非常感谢再见
答案 0 :(得分:1)
您希望将角色27添加到用户10并从用户10中删除角色23.您必须完全执行以下两个步骤来“更新”UserRoles
表(它实际上是后续的INSERT和DELETE)
看起来像这样:
if (parameter_role > 0)
{
var user = (from r in context.Users.Include("Roles") // include the roles
where r.UserId.Equals(10) // parameter_user
select r).FirstOrDefault();
if (user != null)
{
Roles oldRole = (from r in user.Roles
where r.RoleId.Equals(23)
select r).FirstOrDefault();
if (oldRole != null)
user.Roles.Remove(oldRole);
Roles newRole = (from r in context.Roles
where r.RoleId.Equals(27) // parameter_role
select r).FirstOrDefault();
if (newRole != null)
user.Roles.Add(newRole);
user.Name = "Paul";
}
}
如果您要删除所有旧角色并仅添加新角色27,请使用user.Roles.Clear()
代替...Remove(oldRole)
:
//...
if (user != null)
{
user.Roles.Clear();
Roles newRole = ... // etc.
//...
}