2016-08-12 41 views
0

我最近向數據庫中的AspNetUsers表中添加了一些新列(試圖從Identity 1.0遷移到2.0)。我將'EmailConfirmed'列設置爲可爲空,但是當它運行項目並登錄時,我收到一個錯誤消息,說明:「操作:LoginPartial控制器:帳戶異常消息:'IdentityUser`4'EmailConfirmed'屬性無法設置爲'null'值,您必須將此屬性設置爲'System.Boolean'類型的非空值'。「收到錯誤,指出空值無法插入到'Asp.netUsers'表中的'EmailConfirmed'列中

錯誤發生在帳戶控制器頁面內部的Login方法內部。這裏是一些代碼(它與用戶變量一致):

[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

看來你改變了數據庫類型,而不是模型類型。

雖然你的表允許空值,但你的C#類映射表不允許空值,是一個「bool」而不是「bool」?

如果你使用的是實體框架,你將不得不改變你的類型映射;否則你會發現表示模型映射到你的表的類,並更改你的「UserManager.FindAsync」方法返回的類型

+0

我知道它的工作原理是:public bool? EmailConfirmed {get;組; }到IdentityUser類。謝謝您的意見。 – Bastian

+1

太好了。你能將答案標記爲正確嗎? –

相關問題