我在这里写了几篇文章:
- 如何扩展 User.Identity 的可用属性
- 如何使用自定义属性扩展身份用户
所以我用自定义属性扩展了我的 IdentityUser;这一切都运行良好。这些自定义属性在 SQL Server 中被指定为具有默认值,即如果我插入一个新用户,这些自定义属性的默认值应该会弹出,对吧?
否 - 它们以 NULL 值失败(因为它们被指定为 NOT NULL(,如果我将它们打开为非 NOT NULL,它们在此处失败(在 AddClaim 行(,
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
userIdentity.AddClaim(new Claim("companyId", this.companyId.ToString()));
return userIdentity;
}
因为即使 companyId 默认值是在 mssql = "newcompanyid" 中设置的,它也永远不会从 NULL 设置,因此返回为 NULL。
我在这里错过了什么?
多亏了 Tieson
,我才能使用这种技术解决这个问题:
http://www.vannevel.net/2015/04/03/how-to-configure-a-custom-identityuser-for-entity-framework/
其依据如下:
- 具有实体框架的 SQL 列默认值
- https://www.learnentityframeworkcore.com/configuration/data-annotation-attributes/databasegenerated-attribute
所以最后我的代码看起来像:
public class ApplicationUser : IdentityUser
{
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public int companyId { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
userIdentity.AddClaim(new Claim("companyId", this.companyId.ToString()));
return userIdentity;
}
}
希望这对其他人有所帮助