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 に追加し、ロール 23 をユーザー 10 から削除します。UserRolesテーブルを「更新」するには、これら 2 つの手順を正確に実行する必要があります (実際には、後続の 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";
    }
}

古い役割をすべて削除し、新しい役割のみを追加したい場合は、user.Roles.Clear()代わりに...Remove(oldRole)次のように使用します。

    //...
    if (user != null)
    {
        user.Roles.Clear();

        Roles newRole = ... // etc.
        //...
    }
于 2013-03-29T13:31:59.933 に答える