插入具有默认值的标识用户,并且自定义属性将失败



我在这里写了几篇文章:

  • 如何扩展 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;
}
}

希望这对其他人有所帮助

相关内容

  • 没有找到相关文章

最新更新