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