我需要自己生成新的 Guid 值。目前,我使用以下结构创建了帮助表:
(id, aspnet_id)
每当我需要获取用户或用户列表时,我都必须连接这两个表。
是否可以告诉实体框架标识管理器不生成新的 Guid,而是使用由我生成的值?
你是对的,guid 不是在数据库中生成的。如果您查看该表,您会注意到该字段没有默认值。
除此之外,使用实体框架时,必须在类的构造函数中设置数据库值。否则,将覆盖数据库的默认值,但数据库中存在但模型不知道的键(自动编号(和字段除外。
因此,如果创建新的标识用户,则会使用 Guid 设置该 ID。但您可以覆盖该值:
var appUser = new IdentityUser
{
UserName = model.Email,
Email = model.Email,
Id = "the desired guid"
};
var identityResult = await userManager.CreateAsync(appUser, model.Password);
无论您如何添加用户,使用userManager或直接添加用户,这都将起作用。所以答案是,是的,你可以。
作为旁注,您还可以扩展身份用户以添加字段:
public class ApplicationUser : IdentityUser
{
[Required]
public int aspnet_id{ get; set; }
public DateTime? LastLogin { get; set; }
}