将控制器名称和操作名称存储到我的自定义表中,我将它们添加到 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 :
- MvcControllers
- ActionsTbls
- GroupsTbls
- AspNetUser_Action
- AspNetUser_Group
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 表示创建数据库时,列表会自动对其表惰性。
- 我认为最好向身份添加一个新的自定义函数以将列表插入 Tables。
感谢您为解决我的问题所做的努力。
如果需要的类型是 Controller 和 ActionResult(没有网络 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
学长们,
我在我的 ASP.Net 网络应用程序上使用 ASP.NET Identity,并将我的自定义 Tables(及其关系)添加到我的 CodeFirst ASP.Net 上的 Identity MVC 项目。当我第一次运行 项目时,数据库是自动创建的,其中包含自定义表以及它们之间在SqlServer 中的关系。
自定义 Tables :
- MvcControllers
- ActionsTbls
- GroupsTbls
- AspNetUser_Action
- AspNetUser_Group
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 表示创建数据库时,列表会自动对其表惰性。
- 我认为最好向身份添加一个新的自定义函数以将列表插入 Tables。
感谢您为解决我的问题所做的努力。
如果需要的类型是 Controller 和 ActionResult(没有网络 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