ASP.NET标识-IUser接口中的用户名和Id之间有什么区别?

ASP.NET标识-IUser接口中的用户名和Id之间有什么区别?,asp.net,asp.net-mvc,asp.net-identity,Asp.net,Asp.net Mvc,Asp.net Identity,我们正在开发一个使用ASP.NET标识(V1.0)的应用程序。我们定义了一个User类来实现IUser接口。我们的存储库类UserRepository实现了IUserStore 现在,当我调用UserManager.CreateAsync(user,password)时,它调用FindByNameAsync()方法UserRepository来检查(我猜)这个新用户是否有唯一的ID 但是我不明白为什么它调用这个方法而不是FindByIdAsync 我假设IUser界面上的UserName属性类似

我们正在开发一个使用ASP.NET标识(V1.0)的应用程序。我们定义了一个
User
类来实现
IUser
接口。我们的存储库类
UserRepository
实现了
IUserStore

现在,当我调用
UserManager.CreateAsync(user,password)
时,它调用
FindByNameAsync()
方法
UserRepository
来检查(我猜)这个新用户是否有唯一的ID

但是我不明白为什么它调用这个方法而不是
FindByIdAsync

我假设
IUser
界面上的
UserName
属性类似于人名(例如“John Smith”),而
Id
是用户的内部唯一标识符

从这个默认实现来看,我想我错了


问题是:在这种情况下,为什么在
IUser
界面上需要这两个属性(
Id
UserName
)?他们之间有什么区别?其中哪一个应该是唯一的ID

它们都是独一无二的。Createasync调用findbyname,因为您不知道要创建的用户的Id,因为它还不存在


FindByID的存在是因为在创建用户后,查找FindByID会更快。

ID通常是数字,尽管默认的Identity实现使用Guid。Name是用户名,通常是全名的句柄或缩写。通常情况下,这是一个电子邮件地址,取决于您如何设置它

Id用作数据库中的主键。名字不是。原因是,您可能会删除具有给定用户名的用户,而另一个用户可能会出现并希望创建具有相同名称的帐户。但是,出于审计和历史原因,您仍然需要一种方法来识别这两个不同的用户


创建用户时,代码如何准确地知道要查找的用户ID?用户名是它唯一知道的东西…

我强烈建议升级到Identity 2.x(最新版本)。他们让很多事情变得更简单,包括了很多你想要的功能,我们肯定会做到的。但问题仍然是一样的。用户名和Id的用途是否相同?为什么两者都有?考虑到两者在Identity中都是字符串类型,速度可能不会快很多。不过,您可以将Id重写为整数。但在Identity 1中不能。Identity 1是否在Username列上创建索引?我知道它在身份2中起作用。。