我正在查看新的ASP.NET标识类上的接口,以及它首先使用实体框架代码创建的数据库.我正在使用Visual Studio 2013 RC.

乍一看,数据库模式看起来相当正常:

在此处输入图像描述

But all the keys are NVARCHAR(128)

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

当我看到你被迫实现的接口时,这些都是字符串...

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关系的字符串来实现这一点.

But I'd really love to know WHY it's built like this...?

EDIT: Time has passed and there are now articles on how to extend the asp.net identity to use int (or guid) fields:

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

推荐答案

其目的是允许两种任意id类型(即intguidstring),但也避免id属性出现序列化/强制转换问题.

因此,您可以随心所欲地定义键,只需实现接口方法

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

Asp.net相关问答推荐

在每个对象上设置 ClientIDMode = Static 是否有任何缺点(在母版页的 maincontent 上设置)

HttpRuntime.Cache[] 与 Application[]

为什么微软决定支持 jQuery 如此重要?

如何在页面加载之前运行 JavaScript 代码?

如何设置 CSS 切换器

将数据表导出到 Excel 文件

设置 Response.Status 生成HTTP 状态字符串无效异常

我的 asp.net mvc Web 应用程序中的 OutputCache 设置.防止缓存的多种语法

如何从后面的 ASP.NET 代码访问 HTML 表单输入

GMT 和 UTC 一样吗?

如何在 ASP.NET MVC 中启用跨源请求

解析器错误消息:无法加载类型网络营销

将当前谷歌 map 保存为图片

导航到本地 IIS Express 时,Chrome 会返回错误请求 - 请求太长

System.Reflection.Assembly.LoadFile 锁定文件

Asp.Net web 服务:我想返回错误 403 禁止

MSBuild DeployOnBuild=true 不发布

使用 ASP.NET 进行重定向后获取

回发后运行javascript函数

哪个事件先调用?母版页 Page_Load 或内容页 Page_Load