将IdentityUser主键从string更改为int后,创建用户的SqlException

时间:2018-02-07 09:13:37

标签: asp.net entity-framework asp.net-identity

在我跟着this将应用程序用户ID的类型从字符串更改为int后,如果我尝试创建新用户,则会收到SqlException。

确切的错误是:

无法将值NULL插入列'Id'表'DBNAME.dbo.AspNetUsers';列不允许空值。 INSERT失败。声明已经终止。

Line 208:                };
Line 209:
Line 210:                var result = await UserManager.CreateAsync(user, model.Password);
Line 211:                if (result.Succeeded)
Line 212:                {

Source File: C:\Projects\ProjectName\ProjectName\Controllers\MembersController.cs    Line: 210 

[SqlException (0x80131904): Cannot insert the value NULL into column 'Id', table 'DBNAME.dbo.AspNetUsers'; column does not allow nulls. INSERT fails.
The statement has been terminated.]

以下是AspNetUsers表设计视图的截图: enter image description here

我看过How to tell the primary key 'Id' of IdentityUser class is IDENTITY(1,1)?ASP.NET Identity - Error when changing User ID Primary Key default type from string to int AND when using custom table names,但对我帮助不大。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

您的身份不再为您生成密钥的问题 - 它之前就已经过了。

要使此问题起作用,您需要获取由数据库自动生成的密钥。要完成此操作,您需要在Id类的ApplicationUser属性中应用以下属性:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public override int Id { get; set; }

并添加另一个数据库迁移,以确保数据库知道如何处理此字段。

UPD :oops。刚刚注意到你已经链接到我的相同答案。这没有用吗?