假设我有一个标准的
WebApplication
将数据持久保存到远程数据库。通过逻辑分离,我有一个 DataAccess
类,该类当前正在 OnModelCreating()
中初始化一组自定义角色。
以同样的方法,我想为用户提供种子并为其分配角色,以保持种子按逻辑分离。目前
OnModelCreating()
看起来像这样(添加简单角色):
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<IdentityRole>().HasData(
new IdentityRole
{
Id = "300c6b87-3d71-407c-8379-53e4b3091a8d",
Name = "Administrator",
NormalizedName = "Administrator".ToUpper(),
ConcurrencyStamp = null
});
//More roles added here
}
鉴于
Id
等属性以及其他属性数组通常由数据库生成,执行此操作的标准和最佳实践方法是什么?
您走在正确的轨道上,添加角色是通过
OnModelCreating()
完成的,但是您不应该指定 Id,因为它们是使用 Guid
结构动态生成的。如果直接指定它们可能会失去唯一性。在添加角色方面,您的代码也是正确的,但我会删除不必要的 ConcurrencyStamp
声明,因为默认情况下它是 null
。
这是我的做法,复制自Teddy Smith:
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
List<IdentityRole> roles = new List<IdentityRole>
{
new IdentityRole
{
Name = "Admin",
NormalizedName = "ADMIN"
},
new IdentityRole
{
Name = "User",
NormalizedName = "USER"
},
new IdentityRole
{
Name = "Super-User",
NormalizedName = "SUPER-USER"
}
};
builder.Entity<IdentityRole>().HasData(roles);
}