gpt4 book ai didi

c# - 如何将 IdentityRole 扩展为自定义表名

转载 作者:太空狗 更新时间:2023-10-29 23:14:24 25 4
gpt4 key购买 nike

我正在尝试为我的 MVC 5、Identity 2.0 项目实现基于角色的安全性。我一直在网上查看一些教程,但有点卡住了。

我创建了以下内容:

public class Role : IdentityRole
{
public Role(string name) : base(name)
{ }

public Role()
{ }

public string Description { get; set; }
public string MenuIcon { get; set; }
public string ControllerName { get; set; }
public string ActionName { get; set; }
}

和我的上下文:

    new public DbSet<Role> Roles { get; set; }

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

base.OnModelCreating(modelBuilder);

//rename the tables and columns used by the Identity Framework
modelBuilder.Entity<User>().ToTable("User");
modelBuilder.Entity<Role>().ToTable("Role");
modelBuilder.Entity<UserRole>().ToTable("UserRole");
modelBuilder.Entity<IdentityUserLogin>().ToTable("UserLogin");
modelBuilder.Entity<IdentityUserClaim>().ToTable("UserClaim");
}

和我的种子方法:

    RoleManager roleManager = new RoleManager(new RoleStore<Role>(context));
roleManager.Create<Role, string>(new Role("Orders"));

但是,当我运行该应用程序时,它会为角色创建包含 2 个表的数据库:Role(这是我希望角色存在的位置,它包含我的自定义属性)和 AspNetRoles。它确实使用我在 Seed 方法中创建的角色填充了两个表。

我到底做错了什么,它正在创建 2 个表?

最佳答案

所有的 asp.net 表都应该识别新的表名,而不仅仅是更改后的表。

用户表:

public class User : IdentityUser<string, UserLogin, UserRole, UserClaim>
{
// Your properties
}

用户登录表:

public class UserLogin : IdentityUserLogin { }

用户角色表:

public class UserRole : IdentityUserRole { }

UserClaim 表:

public class UserClaim : IdentityUserClaim { }

角色表:这顶帽子要继承自IdentityRole<string, UserRole>

public class Role : IdentityRole<string, UserRole> 
{
//Any relevant properties

public string Description { get; set; }
public string MenuIcon { get; set; }
public string ControllerName { get; set; }
public string ActionName { get; set; }
}

数据上下文:这必须继承自IdentityDbContext<User, Role, string, UserLogin, UserRole, UserClaim>

public class YourDataContext : IdentityDbContext<User, Role, string,   UserLogin, UserRole, UserClaim>
{
// Your DbSet items

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);

modelBuilder.Entity<User>().ToTable("User");
modelBuilder.Entity<Role>().ToTable("Role");
modelBuilder.Entity<UserClaim>().ToTable("UserClaim");
modelBuilder.Entity<UserLogin>().ToTable("UserLogin");
modelBuilder.Entity<UserRole>().ToTable("UserRole");

modelBuilder.Entity<User>().Property(r => r.Id);
modelBuilder.Entity<UserClaim>().Property(r => r.Id);
modelBuilder.Entity<Role>().Property(r => r.Id);

//Add your new properties of Role table in here.


}
}

在这个例子中,我使用表的 ID 作为 string类型。

希望这对您有所帮助。

关于c# - 如何将 IdentityRole 扩展为自定义表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26158288/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com