当运行Asp.net项目时,MVC5Identity 2.0将自动创建5个表。
在这里,我的问题是为什么像AspnetUser这样的一些表,它的项'Id‘类型被定义为字符串。
字符串看起来像GUID,但为什么它不定义为guid类型,而是使用字符串。
它是从字符串中转移数据类型,还是在查询数据时做一些事情?
我不明白为什么它定义为字符串,但看起来像guid?
另一个表和AspnetRole有同样的问题,它的项目'UserId','RoleId‘也被定义为字符串。
有什么想法吗?
发布于 2014-09-24 15:29:02
我猜这是有不同的原因。
其中一个原因是Guids的插入性能,在大量数据(聚集索引)之后,Guids的插入性能将变得越来越慢。
另一个原因是在不同的数据库中处理Guid的不同。Microsoft Sql Server有一个Guid类型的UniqueIdentifier,MySql将它们存储为字符串,Oracle存储Guid的原始字节...
我希望这部分解释了你的问题,因为不是完全的:)...
发布于 2014-09-24 17:53:14
标识框架不仅是为代码优先方法创建的,也是为了生成具有给定字段或数据类型的数据库表。Identity framework可以用于现有数据库或迁移旧的asp.net成员提供程序,或者我们可以使用我们自己的表名和额外的数据库字段在identity表上存储更多数据。
此外,aspnetUser表(即用户表)的Id用作字符串,因为我们可以根据需要对此字段使用Guid、integer、long等。
例如:如果您决定使用integer作为aspnetUser表(User表)的Id,那么数据库字段将是自动增量int (或bigInt等)。字段。但是为了满足实体框架的迁移需求,您需要进行模型绑定。
默认情况下,当我们使用开箱即用的asp.net身份框架时,我们会将Guid插入到此字段中。
当您为注册用户定义了角色时,将有记录添加到AspnetRole表中,这也完全取决于我们在表中定义的字段,就像我之前讨论的那样。如果我们决定使用integer作为aspnetUser表的Id,那么AspnetRole表字段将根据与aspnetUser表字段的关系进行更新。
希望这能有所帮助。
https://stackoverflow.com/questions/26008799
复制相似问题