2016-08-12 20 views
0

最近、Identity 1.0から2.0への移行を目的としてデータベースのAspNetUsersテーブルに新しい列を追加しました。私は 'EmailConfirmed'カラムをnullに設定していましたが、プロジェクトを実行してログインする時に、「アクション:LoginPartialコントローラ:アカウント例外メッセージ: 'IdentityUser`4の' EmailConfirmed ' 'null'値に設定することはできませんでした。このプロパティを 'System.Boolean'型のnull以外の値に設定する必要があります。「AspNetUsers」テーブルの「EmailConfirmed」列にnull値を指定する受信エラーを挿入できません。

エラーは、アカウントコントローラページ内のログインメソッド内で発生します。この向こう

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryTokenOnAllPosts] 
    public async Task<ActionResult> Login(LoginViewModel model) 
    { 
     try 
     { 
      if (ModelState.IsValid) 
      { 
       var user = await UserManager.FindAsync(model.UserName, model.Password); 
       if (user != null) 
       { 
        await SignInAsync(user, false);       

        return RedirectToAction("HomeIndex", "Home"); 
       } 
       else 
       { 
        TempData["ErrorMsg"] = "Incorrect email and/or password. Please try again..."; 
       } 
      } 
      // If we got this far, something failed, redisplay form 

      return View("LoginPartial", model); 
     } 
     catch (Exception e) 
     { 
      HandleErrorInfo error = new HandleErrorInfo(e, "Account", "LoginPartial"); 
      return View("Error", error); 
     } 
    } 

私はここから行くのはどこ本当にわからない:ここではいくつかのコードは、(それがユーザー変数を持つ行で壊す)です。エラーを引き起こしていることと、それを修正するために何ができるかについて誰かが手掛かりを持っていますか?

P.S.ここでは、データベース内のテーブルの写真です:

enter image description here

答えて

2

あなたはモデルタイプをデータベースの種類を変更しましたが、いないようです。

テーブルではNULLを使用できますが、テーブルをマップするC#クラスではNULLが許可されず、「bool」ではなく「bool」になります。

エンティティフレームワークを使用している場合は、型マッピングを変更する必要があります。それ以外の場合は、モデルを表すクラスがテーブルにマップされ、 "UserManager.FindAsync"メソッドによって返されるタイプが変更されます。

+0

public bool? EmailConfirmed {get;セット; }をIdentityUserクラスに追加します。あなたのご意見ありがとうございます。 – Bastian

+1

答えを正しいとマークできますか? –

関連する問題