将控制器名称和操作名称存储到我的自定义表中,我将它们添加到 CodeFirst Asp.Net MVC 项目中的身份中

Store the Controllers name and Actions Name into my Custom Tables that I Add them into Identity in CodeFirst Asp.Net MVC Project

学长们,
我在我的 ASP.Net 网络应用程序上使用 ASP.NET Identity,并将我的自定义 Tables(及其关系)添加到我的 CodeFirst ASP.Net 上的 Identity MVC 项目。当我第一次运行 项目时,数据库是自动创建的,其中包含自定义表以及它们之间在SqlServer 中的关系。
自定义 Tables :

  1. MvcControllers
  2. ActionsTbls
  3. GroupsTbls
  4. AspNetUser_Action
  5. AspNetUser_Group
  6. Action_Group

    • 这是我的数据库映像的图表: Click Here

为了创建自定义表格,我将一些代码添加到 IdentityModels.cs。
IdentityModels.cs :

namespace Admin_Base_SN.Models
{
    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit https://go.microsoft.com/fwlink/?LinkID=317594 to learn more.
    public class ApplicationUser : IdentityUser
    {
        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
            return userIdentity;
        }
        public virtual AspNetUser_Action AspNetUser_Action { get; set; }

        public virtual AspNetUser_Group AspNetUser_Group { get; set; }

    }

    public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
    {


        public DbSet<MvcController> MvcController { get; set; }
        public DbSet<ActionsTbls> ActionsTbls { get; set; }
        public DbSet<AspNetUser_Action> AspNetUser_Actions { get; set; }

        public DbSet<GroupsTbl> GroupsTbls { get; set; }
        public DbSet<Action_Group> Action_Groups { get; set; }

        public DbSet<AspNetUser_Group> AspNetUser_Groups { get; set; }
        public ApplicationDbContext()
            : base("DefaultConnection", throwIfV1Schema: false)
        {
        }

        public static ApplicationDbContext Create()
        {
            return new ApplicationDbContext();

        }

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

            // one-to-zero or one relationship between ApplicationUser and Customer
            // UserId column in Customers table will be foreign key
            modelBuilder.Entity<ApplicationUser>()
                .HasOptional(m => m.AspNetUser_Action)
                .WithRequired(m => m.ApplicationUser)
                .Map(p => p.MapKey("AspNetUser_Id"));

            modelBuilder.Entity<ApplicationUser>()
                .HasOptional(m => m.AspNetUser_Group)
                .WithRequired(m => m.ApplicationUser)
                .Map(p => p.MapKey("AspNetUser_Id"));

        }

    }
}

我想要什么
首先,我想将项目的所有控制器名称和动作名称保存到单独的列表中,然后将它们插入 MvcController Table & ActionsTbl Table.This 过程应该在我 运行 项目时自动完成对于第一个 time.I 表示创建数据库时,列表会自动对其表惰性。

感谢您为解决我的问题所做的努力。

如果需要的类型是 ControllerActionResult(没有网络 api),那么 你可以通过反射获得控制器和动作

        var controllers = Assembly.GetAssembly(typeof(*any type in assembly*))
            .GetTypes()
            .Where(x => x.IsSubclassOf(typeof(Controller)))
            .ToList();

        var result = controllers
            .Select(type => new
            {
                ControllerType = type,
                Actions = type.GetMethods()
                .Where(m => m.ReturnType == typeof(ActionResult) || m.ReturnType.IsSubclassOf(typeof(ActionResult))).ToList()
            })
            .ToList();

由于您使用的是 EF,因此您可以将所有必要的逻辑放入 Seed Method 并启用 Automatic Migration