Asp.net mvc5 Identity?



Asp.net mvc 5 Identity 2.0将在运行mvc项目时自动创建5个表。

在这里,我的问题是为什么有些表像AspnetUser,它的项"Id"类型定义为字符串。

字符串看起来像GUID,但为什么它没有定义为GUID类型而不是使用字符串。

它是从字符串中传输数据类型还是在查询数据时执行某些操作?

我不明白为什么它定义为字符串,但看起来像guid?

另一个表也有同样的问题,比如AspnetRole,它的项"UserId"、"RoleId"也被定义为字符串。

你知道吗?

我猜这有不同的原因。

其中一个原因是Guid的插入性能,在大量数据(聚集索引)之后,它会变得越来越慢。

另一个原因是不同数据库中处理Guid的差异。Microsoft Sql Server的UniqueIdentifier类型为Guid,MySql将它们存储为字符串,Oracle存储Guid的原始字节。。。

我希望这能解释你的部分困惑,因为不是完全的:)。。。

Identity框架不仅是为代码优先的方法创建的,它可以生成具有给定字段或数据类型的数据库表。身份框架可以用于现有数据库或迁移旧的asp.net成员资格提供商,也可以使用我们自己的表名和额外的数据库字段来存储身份表上的更多数据。

此外,aspnetUser表(即User表)的Id被用作字符串,因为我们可以根据要求对此字段使用Guid、integer、long等。

例如:如果您决定使用integer作为aspnetUser表(User表)的Id,那么数据库字段将是自动递增int(或bigInt等)字段。但是为了满足实体框架迁移的要求,您需要进行模型绑定。

默认情况下,当我们使用开箱即用的asp.net标识框架时,我们会将Guid插入该字段。

当您为注册用户定义了角色后,就会有记录添加到AspnetRole表中,这也完全取决于我们在表上定义的字段,正如我之前讨论的那样。如果我们决定使用integer作为aspnetUser表的Id,那么AspnetRole表字段将根据与aspnetUser表格字段的关系进行更新。

希望这能有所帮助。

相关内容

  • 没有找到相关文章

最新更新