本文主要是介绍MVC4中webpages_Membership的几个问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
本来以为系统没问题了,为给进入生产环境作准备,把数据库里的表全部删掉重新建,然后重新注册用户的时候,突然冒出来若干问题,主要集中在webpages_Membership这个类里面。
本来我的model里面是没有这个类的,后来由于需要添加修改密码和删除帐户的功能,就按照http://www.itorian.com/2013/03/PasswordResetting.html里面的加上了这个类。过去一个月中测试从来没出过问题,今天不知道怎么把这个表删了重建就出这么多问题。
第一个问题:
http://www.itorian.com/2013/03/PasswordResetting.html里面的webpages_Membership是这么写的:
[Table("webpages_Membership")]
public class webpages_Membership
{[Key]public int UserId { get; set; }public DateTime CreateDate { get; set; }public string ConfirmationToken { get; set; }public bool IsConfirmed { get; set; }public DateTime LastPasswordFailureDate { get; set; }public int PasswordFailuresSinceLastSuccess { get; set; }public string Password { get; set; }public DateTime PasswordChangeDate { get; set; }public string PasswordSalt { get; set; }public string PasswordVerificationToken { get; set; }public DateTime PasswordVerificationTokenExpirationDate { get; set; }
}
这里面存在两个问题:
1. PasswordChangeDate应该是PasswordChangedDate,少了个d,否则会出现invalid column name "PasswordChangedDate"这种报错。
2. DateTime类的变量都要在后面加问号,也就是改成DateTime?,允许null,否则像LastPasswordFailureDate这种会报错说不能写成null。
第二个问题:
上面的两个问题修正后,重新尝试创建新帐户,再次出现报错:
identity column in table 'webpages_Membership' when IDENTITY_INSERT is set to OFF.
google之后发现这是由于这个表的key是默认由DB自动生成的,如果程序试图像表里插入key,就会出现这个错误。所以需要允许从DB之外插入这个数据作为主键,或者不让DB自动生成主键。
第一种方法需要在数据库中执行
SET IDENTITY_INSERT [TableName] ON
GO
或者在代码中执行
context.ExecuteStoreCommand("SET IDENTITY_INSERT [dbo].[MyUser] ON");
我都试了,没有成功。
第二种方法就是在UserId上面加这个属性:
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]
成功。
参考:http://stackoverflow.com/questions/18907411/entering-keys-manually-with-entity-framework
最后这个类就被改成以下这个样子,可以正常创建帐户:
[Table("webpages_Membership")]public class webpages_Membership{[Key][DatabaseGeneratedAttribute(DatabaseGeneratedOption.None)]public int UserId { get; set; }public DateTime? CreateDate { get; set; }public string ConfirmationToken { get; set; }public bool IsConfirmed { get; set; }public DateTime? LastPasswordFailureDate { get; set; }public int PasswordFailuresSinceLastSuccess { get; set; }public string Password { get; set; }public DateTime? PasswordChangedDate { get; set; }public string PasswordSalt { get; set; }public string PasswordVerificationToken { get; set; }public DateTime? PasswordVerificationTokenExpirationDate { get; set; }}
这篇关于MVC4中webpages_Membership的几个问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!