【问题标题】:Why does ASP.Net Identity 2 store in UserId in a NVARCHAR?为什么 ASP.Net Identity 2 将 UserId 存储在 NVARCHAR 中?
【发布时间】:2014-07-04 04:36:54
【问题描述】:

默认将UserId 存储在NVARCHAR(128) 中。有人可以解释为什么它不将其存储在NVARCHAR 中吗?据我所知,GUID 只不过是数字、字母和破折号。是否需要NVARCHAR 才能正确存储?

【问题讨论】:

  • 我相信 MS 已经公开解决了这个问题,但我没有链接
  • 我不使用 varchar(15) 作为电话号码。我使用 nvarchar(15)。事实上,我开始将所有字符串类型值存储为 NVARCHAR。让技术为您服务。为什么使用 VARCHAR(10) 当您可以使用 NVARCHAR(10) 时,后者将去除困扰 VARCHAR 数据类型的填充。最糟糕的是,在查询从异构数据集中导入的值时,varchars 会导致不一致。
  • 您能详细解释一下 NVARCHAR 和 VARCHAR 之间的区别吗?我的印象是 N 意味着它可以容纳不同的字符集。
  • @Lrb - 你能确认你指的是 SQL Server 数据类型吗?
  • @lrb: 因为在电话号码之类的东西上使用 NVARCHAR 类型(永远不会有真正的 Unicode 字母),你基本上只是为你的每个条目浪费了 15 个字节表 ....

标签: c# asp.net sql-server asp.net-identity


【解决方案1】:

数据类型使用是实体框架实现的一个实现细节。其他连接器(例如用于 MongoDB 的连接器)使用其他数据类型。您可以为此编写自己的实现,但从 Identity 的第 2 版开始,您可以为您的 ID 使用其他类型(无需使用 VARCHAR 或字符串)。要完成这项工作,您必须实现一些从某些框架类派生的附加类。

有关实现示例,请查看 James 在 this thread 中的答案。使用此代码 sn-p 您只需将泛型类型从 int 更改为 Guid 即可将 Guids 作为 ID 的数据类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-20
    • 2014-06-06
    • 2015-05-12
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2017-05-13
    • 1970-01-01
    相关资源
    最近更新 更多