Asp.net mvc5身份?

问题描述:

当运行mvc项目时,Asp.net mvc 5 Identity 2.0将自动创建5个表格。Asp.net mvc5身份?

这里,我的问题是为什么像AspnetUser这样的一些表,它的项目'Id'类型定义为字符串。

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

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

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

另一个表具有与AspnetRole相同的问题,它的项目'UserId','RoleId'也被定义为字符串。

有什么想法吗?

我猜这是有不同的原因。

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

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

我希望这可以解释为什么不完全:)。 ..

+1

那么你是说GUID的性能比String差? – cnz81 2014-09-25 04:20:02

+0

我不是百分百的说服,但是一个同事是,我相信他。但这绝对不是我说的唯一原因。 – 2014-09-25 08:21:01

身份框架不仅为代码第一种方法创建生成具有给定字段或数据类型的数据库表。 Identity框架可以用于现有数据库或迁移旧的asp.net成员资格提供程序,或者我们可以使用我们自己的带有额外数据库字段的表名来在标识表上存储更多数据。

此外,aspnetUser表(也就是User表)的Id用作字符串,因为根据需要,我们可以使用Guid,整数,long等。

例如:如果您决定使用整数作为aspnetUser表(用户表)的ID,那么数据库字段将自动增加int(或bigInt或其他)字段。但是您需要进行模型绑定以满足实体框架迁移需求。

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

当您为注册用户定义角色时,会在AspnetRole表中添加记录,这也完全取决于我们在前面讨论过的表上定义的字段。如果我们决定使用整数作为aspnetUser表的Id,那么将根据与aspnetUser表字段的关系更新AspnetRole表字段。

希望这会有所帮助。

+0

我的问题的关键点是为什么他们默认使用字符串? 我知道我可以根据自己的需求切换类型,但为什么系统默认设置为String而不是GUID或Int? – cnz81 2014-09-25 04:25:01