我正在使用 ASP.NET 核心身份来管理我的应用程序用户。为了存储一些额外的属性,我创建了类"ApplicationUser",如下所示:
public class ApplicationUser : IdentityUser
{
public Guid CustomProperty { get; set; }
}
我现在想要的是,如果数据库中已经存在CustomProperty
的值,UserManager<ApplicationUser>
会给我一个错误。
实现这一目标的最佳方法是什么?
我已经找到了这个解决方案:https://stackoverflow.com/a/39125762/4046585。但是,对于如此简单的要求,似乎要做很多工作。难道没有某种属性可以装饰房产以实现这一目标吗?另外提到的答案也快3岁了。所以我什至不确定它是否适用于 ASP.NET Core 2.2
在 EF core 中,可以指定索引应该是唯一的,这意味着对于给定属性,没有两个实体可以具有相同的值。
在数据库上下文OnModelCreating
中添加以下代码并添加迁移。
modelBuilder.Entity<ApplicationUser>()
.HasIndex(b => b.CustomProperty)
.IsUnique();
请参阅 https://learn.microsoft.com/en-us/ef/core/modeling/indexes
我猜你希望CustomProperty
是独一无二的。您可以使用DatabaseGenerated
属性来实现此目的。
像下面这样装饰您的财产:
public class ApplicationUser : IdentityUser
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid CustomProperty { get; set; }
}
您可以阅读更多内容。