在用户身份系统中添加自定义表时出错

时间:2015-10-01 10:44:49

标签: asp.net-mvc asp.net-identity code-first

我正在关注这篇文章来添加我的自定义表格。 http://www.itorian.com/2013/11/customizing-users-profile-to-add-new.html 在我的AccountViewModels.cs中,我试图添加这样的新自定义表(UserProfileInfo)---

  public class ApplicationUser : IdentityUser
{
    public string EmailID { get; set; }
    public virtual UserProfileInfo UserProfileInfo { get; set; }
}
public class UserProfileInfo
{
    public int Id { get; set; }
    public string City { get; set; }
    public string MobileNum { get; set; }
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
    public System.Data.Entity.DbSet<UserProfileInfo> UserProfileInfo { get; set; }

}

}

在我的帐户控制器的注册操作(发布版本)中,我尝试更新这样的注册操作,但是您可以在city和mobileNum的代码中看到, 它的陈述----- xxx.RegisterViewModel'不包含'City'的定义,也没有扩展方法'City'接受类型'xxx.RegisterViewModel'的第一个参数....

  [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser() { UserName = model.UserName, EmailID = model.EmailID,
                UserProfileInfo = new UserProfileInfo 
                { City = model.City,
                  MobileNum = model.ModileNum
                }
            };
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                AddErrors(result);
            }
        }

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

我不知道这里发生了什么.plzz帮助我。提前谢谢

2 个答案:

答案 0 :(得分:0)

您已经创建了分隔表 - UserProfileInfo - 它不是ApplicationUser的一部分。 你要做的是:

  1. 创建新的ApplicationUser
  2. 创建新的UserProfileInfo
  3. 使用适当的导航属性相互链接或手动分配外键(取决于您的配置)

答案 1 :(得分:0)

我已经看过你提到的那篇文章了。你永远无法将城市和手机号码作为参数传递,因为你还没有在注册视图模型中定义它们。

如果您只想创建另一个表并希望将其保存到数据库中,那么您可以这样做-------

    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser() { UserName = model.UserName };
            user.HomeTown = model.HomeTown;
            var result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                AddErrors(result);
            }
        }

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

并将您的Dbcontext更改为类似的内容----

         public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection")
    {
    }
    public DbSet<UserProfileInfo> UserProfileInfo { get; set; }
    }

并且您的Application用户类应该是这样的-----

      public class ApplicationUser : IdentityUser
  {
    public string HomeTown { get; set; }
    public virtual UserProfileInfo UserProfileInfo { get; set; }
   }