Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么ASP.NET Identity为主键生成自己的Guid而不是依赖SQL Server_C#_Asp.net Identity - Fatal编程技术网

C# 为什么ASP.NET Identity为主键生成自己的Guid而不是依赖SQL Server

C# 为什么ASP.NET Identity为主键生成自己的Guid而不是依赖SQL Server,c#,asp.net-identity,C#,Asp.net Identity,正如标题所述,为什么ASP.NET Identity生成Guid并将其转换为字符串,然后将其作为nvarchar(128)(或者我可能对数据类型有错误)存储到AspNetUsers和AspNetRoles表中 为什么这样做而不是在SQL Server中将表的主键设置为键入uniqueidentifier并使用newid()或newsequentialid() 我是否应该遵循ASP.NET Identity在生成和存储GUID方面的约定?,因为ASP.NET Identity域中有许多实体具有通用

正如标题所述,为什么ASP.NET Identity生成Guid并将其转换为字符串,然后将其作为nvarchar(128)(或者我可能对数据类型有错误)存储到AspNetUsers和AspNetRoles表中

为什么这样做而不是在SQL Server中将表的主键设置为键入uniqueidentifier并使用newid()或newsequentialid()


我是否应该遵循ASP.NET Identity在生成和存储GUID方面的约定?

,因为ASP.NET Identity域中有许多实体具有通用类型参数来指定标识符类型

比如说

另一方面,由于ASP.NET Identity team的某些设计决策,他们在
IUserStore
界面中将
TKey
类型锁定为
string
。见其签名:

public interface IUserStore<TUser> : IUserStore<TUser, string>, IDisposable
       where TUser : class, IUser<string>
公共接口IUserStore:IUserStore,IDisposable 托瑟:上课,尤瑟 也就是说,任何自定义用户存储实现都必须使用
string
user键。另外,也没有说这个接口应该在关系数据库之上实现。例如,在我的例子中,我为和实现了它。而且,我也已经实现了很多年了


总之,在后台,您被迫将任何标识符存储为数据存储中的
string
等效项的原因是因为整个
IUser
接口。他们为什么将标识符类型锁定为
string
与一些设计决策有关(在我的例子中,我发现他们做出了错误的决策…。

也许他们应该让开发人员选择只将主键的类型更改为uniqueidentifier或int,而不仅仅是像此链接中那样的解决方法。哦,我想我必须坚持使用字符串类型,因为我确实需要将主键存储为guid。谢谢你的回答。@Kharlan我同意你的看法。。。无论如何,你需要采取变通办法;P@Kharlan您可以将
string
完全更改为
Guid
,但这需要更多的工作