Asp.net mvc 5 Identity 2.0将在运行mvc项目时自动创建5个表。
在这里,我的问题是为什么像AspnetUser这样的表,它的项目'Id'类型被定义为字符串。
字符串看起来像GUID,但为什么它没有定义为guid类型而不是使用字符串。
是从字符串传输数据类型还是在查询数据时执行某些操作?
我无法弄清楚为什么它定义为字符串,但看起来像guid?
另一个表有像AspnetRole一样的问题,它的项目'UserId','RoleId'也定义为字符串。
有什么想法吗?
答案 0 :(得分:1)
我猜这有不同的原因。
一个原因是Guids的插入性能,在一定数量的数据(Clustered indices)之后会变得越来越慢。
另一个原因是在不同数据库中处理Guid的区别。 Microsoft Sql Server具有一个Guid的UniqueIdentifier类型,MySql将它们存储为字符串,Oracle存储Guid的原始字节......
我希望这可以解释你的部分问题,但并不完全:)...
答案 1 :(得分:0)
不仅为代码第一种方法创建了身份框架,以生成具有给定字段或数据类型的数据库表。身份框架可以用于现有数据库或迁移旧的asp.net成员资格提供程序,或者我们可以使用自己的表名和额外的数据库字段来存储更多数据到身份表。
此外,aspnetUser表的Id(即User表)用作字符串,因为我们可以根据需要使用Guid,integer,long等。
E.g。 :如果您决定使用整数作为aspnetUser表(User表)的Id,那么数据库字段将自动增加int(或bigInt等)字段。但是您需要进行模型绑定才能满足实体框架迁移要求。
默认情况下,当我们使用开箱即用的asp.net Identity框架时,我们会将Guid插入此字段。
当您为注册用户定义了角色时,会在AspnetRole表中添加记录,这完全取决于我们之前在前面讨论过的表中定义的字段。如果我们决定使用整数作为aspnetUser表的Id,那么根据与aspnetUser表字段的关系更新AspnetRole表字段。
希望这有帮助。