C# 如何在标识2中将Id属性从字符串转换为int

C# 如何在标识2中将Id属性从字符串转换为int,c#,asp.net-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Identity,我正在使用ASP.NET MVC 5/Entity 6框架和代码优先的方法在c#中构建一个应用程序。我正在尝试将标识2中的Id属性从string更改为integer 我遵循了似乎是直截了当的原则 然后,我使用以下命令创建迁移 Add-Migration InitialCreate Update-Database 由于某些原因,迁移文件中不包含AspNet表。但是,随后我使用以下命令进行了迁移 Add-Migration InitialCreate Update-Database 迁移执行

我正在使用ASP.NET MVC 5/Entity 6框架和代码优先的方法在c#中构建一个应用程序。我正在尝试将标识2中的
Id
属性从
string
更改为
integer

我遵循了似乎是直截了当的原则

然后,我使用以下命令创建迁移

Add-Migration InitialCreate
Update-Database
由于某些原因,迁移文件中不包含AspNet表。但是,随后我使用以下命令进行了迁移

Add-Migration InitialCreate
Update-Database
迁移执行时没有问题,播种机运行良好

但是,当我运行应用程序时

我得到以下错误

异常详细信息:System.FormatException:输入字符串不在 格式正确

错误突出显示了
Startup.Auth.cs
文件中下面的第38行

Line 36: regenerateIdentityCallback: (manager, user) =>
Line 37: user.GenerateUserIdentityAsync(manager),
Line 38: getUserIdCallback: (id) => (id.GetUserId<int>()))
第36行:regenerateIdentityCallback:(管理者,用户)=>
第37行:user.GenerateUserIdentityAsync(manager),
第38行:getUserIdCallback:(id)=>(id.GetUserId())

如何修复此错误?

您需要删除cookie。一个快速测试是使用不同的浏览器打开你的应用程序(还没有cookie,可能使用IE或Edge)

这是因为当您第一次浏览站点时,创建了一个cookie(使用主键的字符串版本)

当您将主键更改为int时,浏览器中的cookie仍在使用字符串版本,因此您将获得
异常详细信息:System.FormatException:输入字符串的格式不正确。
错误


我曾经被这个错误刺痛过,因此我记得我必须做些什么来修复它,这里有一个链接提供更多信息:

这不是那么容易,你必须从一个允许你重写用户Id类型的子类派生出你的所有类(
UserManager
UserStore
等等,大约5-10个)。正如您的链接所述……我已经按照文档中的说明完成了所有这些。编译的应用程序没有错误,这非常有趣。我希望这就是原因。事实上,这就是问题所在!非常感谢你。