gpt4 book ai didi

asp.net - 为什么 ASP.NET Identity 接口(interface)使用字符串作为主键和外键?

转载 作者:行者123 更新时间:2023-12-03 01:12:49 25 4
gpt4 key购买 nike

我正在查看新的 ASP.NET Identity 类的接口(interface)及其使用 Entity Framework Code First 创建的数据库。我使用的是 Visual Studio 2013 RC。

乍一看,数据库架构看起来相当正常:

enter image description here

但所有键都是 NVARCHAR(128)

出于某种疯狂的原因,AspNetUserSecrets.Id 是一个 PK,看起来它可能指向 AspNetUsers 表中的多个记录。这是否意味着多个 AspNetUsers 必须共享相同的密码?

当我查看“查看您被迫实现的接口(interface)”时,这些都是字符串...

public class User : IUser
{
public string Id { get; set; }
public string UserName { get; set; }
}

public class UserSecret : IUserSecret
{
public string UserName { get; set; }
public string Secret { get; set; }
}

public class UserRole : IUserRole
{
public string UserId { get; set; }
public string RoleId { get; set; }
}

public class UserClaim : IUserClaim
{
public string UserId { get; set; }
public string ClaimType { get; set; }
public string ClaimValue { get; set; }
}

public class UserManagement : IUserManagement
{
public string UserId { get; set; }
public bool DisableSignIn { get; set; }
public DateTime LastSignInTimeUtc { get; set; }
}

public class Tokens : IToken
{
public string Id { get; set; }
public string Value { get; set; }
public DateTime ValidUntilUtc { get; set; }
}

public class UserLogin : IUserLogin
{
public string UserId { get; set; }
public string LoginProvider { get; set; }
public string ProviderKey { get; set; }
}

public class Role : IRole
{
public string Id { get; set; }
public string Name { get; set; }
}

所以我接受了这样一个事实:我可能必须使用 PK 和 FK 关系的字符串来实现这一点。

但我真的很想知道为什么它是这样构建的......?

编辑:时间已经过去了,现在有关于如何扩展 asp.net 身份以使用 int (或 guid)字段的文章:

http://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity

最佳答案

目的是允许任意 id 类型(即 intguidstring),但也避免出现序列化/转换问题对于 id 属性。

因此您可以根据自己的喜好定义键并实现接口(interface)方法

public class MyUser : IUser {
public int Id { get; set; }
string IUser.Id { get { return Id.ToString(); } }
}

关于asp.net - 为什么 ASP.NET Identity 接口(interface)使用字符串作为主键和外键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19238621/

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