0
我需要自己生成新的Guid值。目前,我创建的辅助表,这种结构:是否可以手动生成实体框架AspNet Identity的UserId?
(id, aspnet_id)
每当我需要得到用户的用户或列表,我不得不加入这两个表。
我可以告诉实体框架Identity Manager不生成新的Guids,但使用生成的我的值?
我需要自己生成新的Guid值。目前,我创建的辅助表,这种结构:是否可以手动生成实体框架AspNet Identity的UserId?
(id, aspnet_id)
每当我需要得到用户的用户或列表,我不得不加入这两个表。
我可以告诉实体框架Identity Manager不生成新的Guids,但使用生成的我的值?
你说得对,数据库中没有生成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; }
}
你不想使用由数据库生成的主键,不是吗?作为选项,您可以将Key属性注释为DatabaseGeneratedOption.None,并为更改跟踪器中的所有已添加实体分配生成的GUID。 –
Asp.Net Identity类的构造函数中有Guid.NewGuid(),所以我猜这不是创建这些键的数据库。 – EwanCoder