2017-05-18 2 views
1

So habe ich eine asynchrone Task-Methode, Typ T = ActionResult, um einen neuen Benutzer in der Datenbank (DBMS = SQL Server) zu speichern. Dies war früher perfekt zu arbeiten, bevor ohne Fehler, aber ganz plötzlich sie zu brechen beginnt, wenn es zu diesem Punkt in der Ausführung bekommt:Identity versucht, die E-Mail-Eigenschaft zu duplizieren, wenn ich einen Benutzer einfüge

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

ich alles auf die Arbeitsversion auf Git zurückgekehrt haben aber noch kein Glück.

Was könnte das Problem sein und wie kann ich das umgehen?

Controller:

[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); 
} 

Modell: 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; 
    } 
} 

Ausnahme:

. Ausnahme: Message = „Ein Fehler ist aufgetreten, während die Einträge zu aktualisieren finden Sie in der innere Ausnahme für Details . "

Innerer Ausnahmefehler: Der Spaltenname 'email' wird mehr als einmal in der SET-Klausel oder Spaltenliste eines INSERT angegeben. Einer Spalte darf nicht mehr als ein Wert in derselben Klausel zugewiesen werden. Ändern Sie die Klausel in stellen Sie sicher, dass eine Spalte nur einmal aktualisiert wird. Wenn diese Anweisung Spalten in einer Ansicht aktualisiert oder einfügt, kann das Spalten-Aliasing die Duplizierung in Ihrem Code verbergen.

Aber wenn ich meinen Code überprüfe, gebe ich E-Mail nur einmal an.

+1

Hinzufügen Fehler Sie gelangen zu der Frage. – User3250

+0

hast du das Identitätspaket aktualisiert/ –

+2

** 'es fängt an zu brechen' **. Schade, dass dies kein [mcve] ist, mit dem das Problem reproduziert werden kann. Keine Möglichkeit zu sagen, was das Problem sein könnte, basierend auf dem, was gerade gezeigt wird. – Nkosi

Antwort

2

IdentityUser hat bereits eine Email Eigenschaft. Ihr ApplicationUser dupliziert diese Eigenschaft mit email unabhängig von Fall.

Entfernen Sie die doppelte Eigenschaft

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

von ApplicationUser oder außer Kraft setzen mit

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

wenn die Absicht nur war das Anzeigeattribut hinzufügen.

+0

Endlich! Das hat funktioniert. Danke @Nkosi –

+1

@Harold_Finch kein Problem. Es zeigt, dass ein komplettes Beispiel es der Community erleichtert, Ihnen zielgerichtete Antworten zu geben. – Nkosi

+0

Das hat es getan. Der Grund, warum meine anfängliche Frage ein bisschen kurz war, ist, weil einige Leute das Gefühl haben, dass es zu lang wird und faul ist, überall zu lesen ..Aber danke für deine geschätzte Mühe. –

Verwandte Themen