1

我创建了一个函数来更新数据库中的记录,如下所示:

    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 23 行更新为 10 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";
            }

非常感谢再见

4

1 回答 1

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.
        //...
    }
于 2013-03-29T13:31:59.933 回答