1. ホーム
  2. asp.net-mvc

ユーザーデータの更新 - ASP.NET Identity

2023-08-25 13:41:21

質問

カスタムフィールドを ApplicationUser クラス

また、ユーザーがフィールドを入力/編集できるようなフォームを作成しました。

しかし、何らかの理由で、私はデータベースのフィールドを更新することができません。

[HttpPost]
[ActionName("Edit")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Manage(EditProfileViewModel model)
{
    if (ModelState.IsValid)
    {
        // Get the current application user
        var user = User.Identity.GetApplicationUser();

        // Update the details
        user.Name = new Name { First = model.FirstName, Last = model.LastName, Nickname = model.NickName };
        user.Birthday = model.Birthdate;

        // This is the part that doesn't work
        var result = await UserManager.UpdateAsync(user);

        // However, it always succeeds inspite of not updating the database
        if (!result.Succeeded)
        {
            AddErrors(result);
        }
    }

    return RedirectToAction("Manage");
}

私の問題は、次のようなものです。 MVC5 ApplicationUserのカスタムプロパティ に似ていますが、IdentityManagerクラスが存在しないため、古いバージョンのIdentityを使用しているようです。

を更新する方法について、どなたか教えていただけませんか。 User の情報を更新する方法を教えてください。

UPDATEです。 登録フォームにすべてのフィールドを含めると、すべての値は、新しいレコードの適切なフィールドに格納されます。 Users テーブルの新しいレコードの該当フィールドに格納されます。

既存のユーザー(の行)のフィールドに変更を加えることは分かりません。 users テーブルの行)。 UserManager.UpdateAsync(user) は機能しません。

また、私の問題はEntityFrameworkよりもIdentity指向であることに注意してください。

どのように解決するのですか?

OK... 私は何時間もかけて、なぜ userManager.updateAsync が編集したユーザーデータを持続させないのか......次の結論に達するまで、私は何時間も費やしました。

この混乱は、私たちが UserManager をこのように一行で作成していることにあります。

var manager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(new MyDbContext()));

...それから manager.UpdateAsync( user ); を使いますが、これではコンテキストのユーザが更新されてしまい、IdentityのDBcontextに変更を保存する必要があります。そこで、問題は、最も簡単な方法でIdentityのDBcontextを取得する方法です。

これを解決するためには UserManager を1行にまとめることです......その方法は以下の通りです。

var store = new UserStore<ApplicationUser>(new MyDbContext());
var manager = new UserManager(store);

を呼び出してユーザーを更新した後

manager.UpdateAsync(user);

で、コンテキストに移動します。

var ctx = store.context;

では

ctx.saveChanges();

wahooooooo...persisted :)

これが数時間髪を引っ張っていた人の助けになることを願っています :P