2013-07-11 3 views
2

Я пытаюсь расширить Простой членство, чтобы включить FirstName, SecondName и адрес электронной почты, однако у меня возникают некоторые проблемы с CreateUserAndAccount.WebSecurity.CreateUserAndAccount «Поле не существует»

Так в основном в RegisterModel я добавил следующее: -

[Display(Name = "First Name")] 
    [Required(ErrorMessage = "Text is required")] 
    public string FirstName { get; set; } 

    [Display(Name = "Second Name")] 
    [Required(ErrorMessage = "Text is required")] 
    public string SecondName { get; set; } 

    [Display(Name = "Email")] 
    [Required(ErrorMessage = "Email required")] 
    [RegularExpression(@"^\w+([-+.]*[\w-]+)*@(\w+([-.]?\w+)){1,}\.\w{2,4}$")] 
    public string ContactEmail { get; set; } 

в Register.cshtml я добавил пользователь вводит: -

 <li> 
      @Html.LabelFor(m => m.FirstName) 
      @Html.TextBoxFor(m => m.FirstName) 
     </li> 
     <li> 
      @Html.LabelFor(m => m.SecondName) 
      @Html.TextBoxFor(m => m.SecondName) 
     </li> 
     <li> 
      @Html.LabelFor(m => m.ContactEmail) 
      @Html.TextBoxFor(m => m.ContactEmail) 
     </li> 

, а затем в AccountController.cs У меня есть следующее: -

[HttpPost] 
    [AllowAnonymous] 
    [ValidateAntiForgeryToken] 
    public ActionResult Register(RegisterModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      // Attempt to register the user 
      try 
      { 
       var UserInfo = 
       new 
       { 
        FirstName = model.FirstName, 
        SecondName = model.SecondName, 
        ContactEmail = model.ContactEmail 
       }; 

       WebSecurity.CreateUserAndAccount(model.UserName, model.Password, UserInfo); 
       WebSecurity.Login(model.UserName, model.Password); 
       return RedirectToAction("Index", "Home"); 
      } 
      catch (MembershipCreateUserException e) 
      { 
       ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
      } 
     } 

     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

Проблема в том, что когда он пытается сделать

WebSecurity.CreateUserAndAccount(model.UserName, model.Password, UserInfo); 

Я получаю сообщение об ошибке следующего содержания: -

Недопустимое имя столбца 'Имя'.

Неверное имя столбца «Второе имя».

Недопустимое имя столбца 'ContactEmail'.

Это потому, что таблица пользователей не создается с полями? Если это так, как я могу создать эти поля. У меня уже есть набор инициализации

 WebSecurity.InitializeDatabaseConnection("DefaultConnection", "UserProfile", "UserId", "UserName", autoCreateTables: true); 

Любая помощь очень ценится.

Благодаря

** * *UPDATE* ** * ** * ** * ** * ** * ** * **

Это UserProfile

public class UserProfile : ProfileBase 
{ 
    [Display(Name = "First Name")] 
    public virtual string FirstName 
    { 
     get 
     { 
      return (this.GetPropertyValue("FirstName").ToString()); 
     } 
     set 
     { 
      this.SetPropertyValue("FirstName", value); 
     } 
    } 

    [Display(Name = "Last Name")] 
    public virtual string LastName 
    { 
     get 
     { 
      return (this.GetPropertyValue("LastName").ToString()); 
     } 
     set 
     { 
      this.SetPropertyValue("LastName", value); 
     } 
    } 

    [Display(Name = "Contact Email")] 
    public virtual string ContactEmail 
    { 
     get 
     { 
      return (this.GetPropertyValue("ContactEmail").ToString()); 
     } 
     set 
     { 
      this.SetPropertyValue("ContactEmail", value); 
     } 
    } 

    public static UserProfile GetProfile(string username) 
    { 
     return Create(username) as UserProfile; 
    } 
} 

ответ

0

Вам нужно добавить эти три новых поля (FirstName, SecondName и ContactEmail) к классу UserProfile который наследуется DbContext.

Класс UserProfile определен в вашей модели учетных записей.

[Table("UserProfile")] 
public class UserProfile 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 
    public string UserName { get; set; } 
    public string FirstName { get; set; } 
    public string SecondName { get; set; } 
    public string ContactEmail { get; set; } 
} 

Обязательно удалите свои таблицы, чтобы удалить предыдущие таблицы.

+0

Я уже добавил их в UserProfile! Пожалуйста, см. Обновленный вопрос – Johann

+0

. После дальнейшего расследования я решил пойти с двумя разными таблицами и сохранить таблицы членства в целости. – Johann

0

Проблема в том, что вы использовали простое членство перед тем, как выполнить эти изменения в своей модели. Это вызвало то, что SimpleMembership создал таблицу UserProfile со столбцами по умолчанию (id и name).

В этой ситуации установка autoCreateTables: true не помогает, потому что ваши таблицы существуют! но у них нет новых столбцов.

Поэтому вам нужно удалить эти 4 таблицы и позволить инициализатору db создать для вас новые действительные таблицы.

Смежные вопросы