Der*_*mes 55 asp.net asp.net-identity
我正在查看新ASP.NET Identity类的接口以及它使用Entity Framework Code First创建的数据库.我正在使用Visual Studio 2013 RC.
乍一看,数据库模式看起来相当正常:

但是所有钥匙都是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; }
}
Run Code Online (Sandbox Code Playgroud)
所以我接受这样一个事实,即我可能必须使用字符串来实现PK和FK关系.
但我真的很想知道它为什么这样建造......?
编辑:时间已经过去,现在有关于如何扩展asp.net标识以使用int(或guid)字段的文章:
http://www.asp.net/identity/overview/extensibility/change-primary-key-for-users-in-aspnet-identity
Hao*_*ung 32
这样做的目的是为了让双方任意ID类型(例如int,guid,string),但也避免了id属性的序列化/铸造的问题.
因此,您可以根据需要定义键,只需实现接口方法即可
public class MyUser : IUser {
public int Id { get; set; }
string IUser.Id { get { return Id.ToString(); } }
}
Run Code Online (Sandbox Code Playgroud)
Ric*_*SFT 17
郝说: