Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 SimpleMembership-将电子邮件添加到UserProfile-System.Data.SqlClient.SqlException:无效列名;电邮;错误_Asp.net Mvc 4_Simplemembership - Fatal编程技术网

Asp.net mvc 4 SimpleMembership-将电子邮件添加到UserProfile-System.Data.SqlClient.SqlException:无效列名;电邮;错误

Asp.net mvc 4 SimpleMembership-将电子邮件添加到UserProfile-System.Data.SqlClient.SqlException:无效列名;电邮;错误,asp.net-mvc-4,simplemembership,Asp.net Mvc 4,Simplemembership,我相当肯定我已经遵循了所有的步骤,但似乎错过了一些东西。在MVC4应用程序中使用simplemembership。将电子邮件添加到UserProfile表中,并在Register和UserProfile模型中,将其添加到Register方法中,但仍然会收到错误。下面是一些代码: 型号: public class UserProfile { public int UserId { get; set; } public string UserName { get; set; }

我相当肯定我已经遵循了所有的步骤,但似乎错过了一些东西。在MVC4应用程序中使用simplemembership。将电子邮件添加到UserProfile表中,并在Register和UserProfile模型中,将其添加到Register方法中,但仍然会收到错误。下面是一些代码:

型号:

public class UserProfile
{
    public int UserId { get; set; }
    public string UserName { get; set; }
    public string Email { get; set; }
}

public class RegisterModel
{
    [Display(Name = "Email Address")]
    [StringLength(20)]
    // [Required]
    public string Email { get; set; }

    [Display(Name = "Date of Birth")]
    //   [Required]
    public DateTime DOB { get; set; }

    [Required]
    [System.Web.Mvc.Remote("VerifyUserExists", "Account", ErrorMessage="That Username is already taken.")]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }
}
控制器:

    public ActionResult Register(RegisterModel model)
    {
        if (ModelState.IsValid)
        {
            // Attempt to register the user
            try
            {
                WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Email = model.Email });
                WebSecurity.Login(model.UserName, model.Password);

                return RedirectToAction("Index", "Home");
            }
            catch (MembershipCreateUserException e)
            {
                ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
            }


        }
我没有试图使用电子邮件地址作为登录名,只是想在注册过程中抓取它,这样我就可以发送一封自动确认电子邮件


我试过使用EF模型中包含的UserProfile表,没有任何区别。我已确认数据库中的表有一个电子邮件列。

如果使用默认连接,请单击查看->服务器资源管理器打开数据库,然后展开默认连接。在表下,您将看到UserProfile表。首先将列添加到表中并更新数据库,然后将额外字段添加到类中。

我猜电子邮件属性(在您的UserProfile类中)是您在第一次执行应用程序后添加的内容,因此如果在您更改模型并添加电子邮件属性之前表已经存在,这可能是异常的原因

正如你在评论中提到的:


如果我从控制器中的Register方法中删除节new{Email etc',它将通过罚款

要解决这个问题,我认为您需要在DbContext deriven类中执行类似的操作(假设您使用代码优先的方法):

公共类myDbContext:DbContext
{
公共myDbContext()
:base(“默认连接”)
{
SetInitializer(新的DropCreateDatabaseIfModelChanges());
}
公共数据库集用户配置文件{get;set;}
}

默认设置为CreateDatabaseIfNotExists,因此,如果您的UserProfile表已经存在,它不会再次创建它,也不会找到您的新电子邮件属性(它在您的模型中,但不在数据库表中);

这里的内容看起来不错。可能您有多个不知道的数据库(如文件)。在执行过程中的什么时候收到错误?这一行上的错误:WebSecurity.CreateUserAndAccount(model.UserName,model.Password,new{Email=model.Email});AppData文件夹为空,唯一的连接字符串指向SQL Server 2012中的我的localdb实例,数据库位于该实例中。我一直在研究CreateUserAndAccount方法,以找出它试图保存到的位置,但到目前为止还没有找到任何结果。当调用
WebSecurity.InitializeDatabaseConnection
时,哪个连接是您正在使用的字符串(这是正确的数据库吗)?如果我从控制器中的Register方法中删除节new{Email etc',它将正常通过。因此它将保存到我不知道的某个位置。连接字符串指定了localdb和数据库,因此不确定它将如何转到其他位置:数据源=(localdb)\v11.0;初始目录=MyDatabase@teahou.你是如何创建这个专栏的?
     public class myDbContext: DbContext
{
    public myDbContext()
        : base("DefaultConnection")
    {
        Database.SetInitializer<myDbContext>(new DropCreateDatabaseIfModelChanges<myDbContext>());
    }

    public DbSet<UserProfile> UserProfiles { get; set; }

}