gpt4 book ai didi

c# - Identity 2.0 String 或 Int 主键?

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:23 26 4
gpt4 key购买 nike

我将为我们现有的和新的应用程序创建一个新的授权 DLL。我们想要为 POCO 类、OAuth 和声明添加 Identity 2.0 primary 的功能。 (声明真的很重要)

因此,首先想到的是主键是一个字符串。我知道这可以改变,但我首先研究了为什么它是一个字符串,我发现了这个 SO 答案: Why do the ASP.NET Identity interfaces use strings for primary and foreign keys?他们清楚地指定字符串“更好”以避免强制转换,因为声明确实使用字符串。

我们当前所有的应用程序都使用 Int 作为主键(自动递增)。

我没有盲目地更改 Identity 实现以使用 int,而是进行了更多研究,在同一个 SO 答案中建议的一种解决方案是使用 ID 的字符串表示。

类似的东西:

[Index(IsClustered = false)]
string Id
[Index(IsClustered = true)]
int LogicalId

我不确定什么是聚簇索引,但读取它以某种方式了解行在物理磁盘中的排列方式,所以它与性能有关,所以我会按原样使用它。

我的问题是:

MAIN:这种情况下的最佳实践/建议是什么?

  • a) 有一个 LogicalId int,
  • b) 用 int 覆盖 Identity 的默认实现
  • c) 将所有的 int 转换为字符串(作为 guid)

如果是 LogicalId (a) :

如果我们无论如何都不能将 PK 用作字符串,这样做的目的是什么?当 SaveChanges 数据库上的新实体时,我应该如何增加 LogicalId? EF 会自动为我做这件事吗?

如果使用 TKey 作为 int 覆盖身份实现:(b)

Claims 上的用户 ID(我猜)总是字符串。如果我们为我们的用户使用多个外部供应商,那会很重要吗?是否可以为 Int 创建 EntityFramework 的具体实现?有人做过吗?

Uninstall-Package Indentity.EntityFramework
Install-Package Identity.EntityFrameworkInt

那就太好了:D

将所有数据转成字符串(c)

使用 GUID 不是很痛苦吗?使用 GUID 的人 您是否还有另一个“更简单”的公共(public)标识符?无法停止影像客服:

I cannot find your user on our records, can you please provide your user id?

哎呀

Site is not working when I click on one of the 50 {similar product}

- What's the product id ?

哈哈

We have two products equal, please delete one.

- Sure, give me the product id

库克

最佳答案

我没有将链接的问题解读为暗示它们更好。 string 并不更好,只是不同而已。我读到它的原因是字符串可以包含整数、guid 和任何东西。如果他们选择使用 int,那么他们就只能使用 int

如您所见,Identity 2.0 中添加了 TKey 以允许使用不同类型的 key ,并且选择不同类型的 key 不会“违反最佳实践”(尽管您应该选择一些传统)。

每当您打算保存一个新实体时,您都不会将其设置为自动递增的标识,而只是使用代码生成一个新的 guid。那里真的没有任何疼痛。

你不应该遇到性能问题,除非你正在开发同时为大量用户提供服务的东西,所有这些都会影响你的数据库。

就我个人而言,我选择 ints 因为我有一个中央数据库来处理所有事情,而且我喜欢 ints 优于 guids 的简单性。如果我正在开发某种具有并发数据库的系统,我会选择 Guids。

字符串仍然提供身份中任何其他键类型的一件事是扩展 User.Identity.GetUserId() 仍然返回一个字符串,所以即使在覆盖 之后你也必须转换它>T键。希望这会在某个时候得到解决。

相关阅读:GUID vs INT

关于c# - Identity 2.0 String 或 Int 主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24923470/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com