2017-05-18 6 views
1

したがって、タイプT = ActionResultという非同期タスクメソッドを使用して、データベース(DBMS = SQL Server)に新しいユーザーを作成します。これは、エラーなしで前に完璧に動作するために使用されるが、突然、それが実行中のこの時点になったとき、それは破壊を開始:私はGitの上の作業バージョンが、それでも運にすべてを戻ってきたユーザーを挿入すると、IDが電子メールのプロパティを複製しようとしています

var result = await UserManager.CreateAsync(user, model.Password); 

何が問題になる可能性があり、どうすればこの問題を回避できますか?

コントローラー:

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Register(RegisterViewModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     var user = new ApplicationUser() 
     { 
      UserName = model.UserName, 
      firstName = model.firstName, 
      lastName = model.lastName, 
      Email = model.email, 
      cellNo = model.cellNo, 
      DateCreated = DateTime.Now 
     }; 
     var result = await UserManager.CreateAsync(user, model.Password); 
     if (result.Succeeded) 
     { 
      //await SignInAsync(user, isPersistent: false); 
      // util.Log(User.Identity.GetUserId(), 5, "Account - Added a user (" + model.UserName + ") to the system"); 
      return RedirectToAction("SuccessfullyAddedNewUser", "Users", model); 
     } 
     else 
     { 
      AddErrors(result); 
     } 
    } 
    // If we got this far, something failed, redisplay form 
    return View(model); 
} 

//Users controller action method to get redirected to once new user has been created successfully 
// GET: /Users/SuccessfullyAddedNewUser 
public ActionResult SuccessfullyAddedNewUser(RegisterViewModel model) 
{ 
    return View(model); 
} 

モデル:ApplicationUser

public class ApplicationUser : IdentityUser 
{ 

    [Required] 
    [StringLength(11, MinimumLength = 11)] 
    [Display(Name = "Cell Number")] 
    public string cellNo { get; set; } 

    [Required] 
    [MaxLength(50), MinLengthAttribute(3)] 
    [Display(Name = "First Name")] 
    public string firstName { get; set; } 


    [Display(Name = "Email Address")] 
    public string email { get; set; } 

    [Required] 
    [MaxLength(50), MinLengthAttribute(3)] 
    [Display(Name = "Last Name")] 
    public string lastName { get; set; } 

    [Display(Name = "Date Created")] 
    public DateTime DateCreated { get; set; } 

    [Required] 
    [DefaultValue(false)] 
    public Boolean MustResetPassword { get; set; } 

    //Concatenates the first and last name 
    public String getFullName() 
    { 
     return firstName + " " + lastName; 
    } 
} 

例外:

例外:エントリを更新中にエラーが発生しました=」メッセージを参照してください。詳細の内部例外"

内部例外:INSERTのSET句または列リストに列名 'email'が複数指定されています。同じ節に複数の値が割り当てられている列は にできません。句を に変更して、列が1回だけ更新されるようにします。このステートメント がビューに列を更新または挿入する場合、列のエイリアシングによってコード内に重複が埋め込まれてしまう可能性があります( )。

私のコードをチェックすると、電子メールは1回だけ指定されます。

+1

質問にはエラーがあります。 – User3250

+0

あなたはアイデンティティパッケージ/ –

+2

**を更新しました** 'それは中断します' **。これはあまりにも悪いことですが、問題を再現するために使用できる[mcve]ではありません。現在表示されている内容に基づいて何が問題になるのかわからない。 – Nkosi

答えて

2

IdentityUserはすでにEmailというプロパティを持っています。あなたのApplicationUserは大文字と小文字の区別なくemailでそのプロパティを複製しています。

ApplicationUserから複製プロパティ

[Display(Name = "Email Address")] 
public string email { get; set; } 

を削除するか、意図が単に表示属性を追加した場合

[Display(Name = "Email Address")] 
public new string Email { get; set; } 

でそれを上書きします。

+0

最後に!これはうまくいった。ありがとう@Nkosi –

+1

@Harold_Finch問題はありません。完全な例が提供されると、コミュニティがあなたにターゲットとされた回答を提供することがより簡単になることを示しています。 – Nkosi

+0

そうでした。私の最初の質問が少し短かった理由は、あまりにも長くなり、読んで怠けているように感じる人もいるからです。しかし、あなたの大切な努力に感謝します。 –

関連する問題