2017-04-08 110 views
0

我需要自己生成新的Guid值。目前,我创建的辅助表,这种结构:是否可以手动生成实体框架AspNet Identity的UserId?

(id, aspnet_id) 

每当我需要得到用户的用户或列表,我不得不加入这两个表。

我可以告诉实体框架Identity Manager不生成新的Guids,但使用生成的我的值?

+0

你不想使用由数据库生成的主键,不是吗?作为选项,您可以将Key属性注释为DatabaseGeneratedOption.None,并为更改跟踪器中的所有已添加实体分配生成的GUID。 –

+0

Asp.Net Identity类的构造函数中有Guid.NewGuid(),所以我猜这不是创建这些键的数据库。 – EwanCoder

回答

0

你说得对,数据库中没有生成guid。如果你看看表格,你会发现该字段没有默认值。

除此之外,使用Entity Framework数据库值必须在类的构造函数中设置。如果不是,则数据库的默认值将被覆盖,但数据库中存在但模型不知道的键(自动编号)和字段除外。

因此,如果您创建一个新的IdentityUser,则使用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或直接添加用户,这都可以工作。所以答案是肯定的。

一点题外话,你还可以延长IdentityUser添加字段:

public class ApplicationUser : IdentityUser 
{ 
    [Required] 
    public int aspnet_id{ get; set; } 

    public DateTime? LastLogin { get; set; } 
} 
相关问题