MVC4中webpages_Membership的几个问题

68 篇文章 0 订阅
6 篇文章 0 订阅

本来以为系统没问题了,为给进入生产环境作准备,把数据库里的表全部删掉重新建,然后重新注册用户的时候,突然冒出来若干问题,主要集中在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; }
    }





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值