我们正在开发一个使用ASP.NET Identity(v 1.0)的应用程序。我们定义了一个实现User
接口的IUser
类。我们的存储库类UserRepository
实现了IUserStore
。
现在,当我致电UserManager.CreateAsync(user, password)
时,它会调用FindByNameAsync()
UserRepository
方法检查(我猜)这个新用户是否有唯一ID。
但是,我不明白为什么它会调用此方法而不是FindByIdAsync
?
我认为UserName
界面上的IUser
属性类似于人名(例如" John Smith"),Id
是内部唯一标识符一个用户。
从这个默认实现中我猜我错了。
问题是:在这种情况下,为什么我们需要Id
接口上的这两个属性(UserName
和IUser
)?他们之间有什么区别?哪一个应该是一个唯一的ID?
答案 0 :(得分:4)
ID通常是数字,但Identity的默认实现使用Guid。名称是用户名,通常是句柄或缩写全名。通常这是一个电子邮件地址,取决于你如何设置它。
Id用作数据库中的主键。名字不是。原因是您可能会删除具有给定用户名的用户,并且可能会出现另一个用户并希望创建具有相同名称的帐户。但是,您仍然需要一种方法来识别这两个不同的用户是出于审计和历史原因。
创建用户时,代码究竟如何知道用户ID才能查找?用户名是他们唯一知道的......
答案 1 :(得分:1)
他们都是独一无二的。 Createasync调用findbyname,因为您还不知道您将要创建的用户的ID,因为它还不存在。
FindByID存在,因为您在创建用户后对其进行查找的速度更快。