1

私は EF5 で ASP MVC アプリケーションに取り組んでいます。Role オブジェクトの権限、グループ、および外部キーのリストを含む User オブジェクトを更新しようとしています。私たちが直面している問題は、アクセス許可、グループ、ユーザー パスワードなどはすべて更新されますが、ロールは更新されないことです。SO を数時間検索しましたが、有効なソリューションを実装できないようです。ユーザーを更新しようとすると、ロールは適切に渡されますが、データベースで更新されません。

以下に、編集ページの投稿があります。私たちはすでにそれをデータベース(データベースコンテキスト)にアタッチしようとしましたが、それをアタッチするための新しいコンテキストを作成し、他のいくつかの答えを無駄にしました。簡単に言えば、更新されたロールをデータベースに渡す方法がわかりません。読んでくれて、うまくいけば返信してくれてありがとう。

  // POST: /User/Edit/5

  [HttpPost]
  [ValidateAntiForgeryToken]
  public ActionResult Edit(User user, string[] selectedPermissions, string[] selectedGroups)
  {
   var userInDb = db.Users.Find(user.Id);
   if (selectedPermissions != null || selectedGroups != null)
   {
    user.Permissions = userInDb.Permissions;
    user.Groups = userInDb.Groups;
   }

   if (user.Username != null && user.Password != null && user.Role != null && user.Person != null)
   {
    user.Person = db.People.Find(user.Person.IdCardNumber);
    user.Person = db.People.Find(user.Person.IdCardNumber);
    user.Role = db.Roles.Find(user.Role.Id);
    SavePerms(selectedPermissions, user);
    SaveGroups(selectedGroups, user);
    db.Entry(userInDb).CurrentValues.SetValues(user);
    db.SaveChanges();
    return RedirectToAction("Index");
   }
   return View(user);
  }
4

1 に答える 1

1

userInDbは追跡対象のエンティティであり、 ではありませんuseruserInDbしたがって、EF がRoleプロパティの変更を追跡できるように、新しいロールを次のように設定する必要があります。

userInDb.Role = db.Roles.Find(user.Role.Id);
于 2013-08-11T15:09:48.297 に答える