我在asp.net领域非常棒。所以我的问题可能在互联网的任何地方都得到了解答,但我们都不了解流程创建。这是问题所在。
我试图创建简单的网站项目',当该网站启动时,如果该表尚不存在,它应该在数据库内创建所有必要的身份表。然后我将角色添加到表中,并将一个用户设置为此表的超级管理员。
任何人都可以帮我解决此问题或分享有关此问题的任何链接。
答案 0 :(得分:15)
我假设你使用的是ASP.NET MVC。
您可以使用Database Initialization为数据库设定种子。
public class MyDBInitializer : CreateDatabaseIfNotExists<ApplicationDBContext>
{
protected override void Seed(ApplicationDBContext context)
{
base.Seed(context);
}
}
在种子方法上,您可以填充数据库并为您的应用程序创建默认用户。
protected override void Seed(ApplicationDBContext context)
{
// Initialize default identity roles
var store = new RoleStore<IdentityRole>(context);
var manager = new RoleManager<IdentityRole>(store);
// RoleTypes is a class containing constant string values for different roles
List<IdentityRole> identityRoles = new List<IdentityRole>();
identityRoles.Add(new IdentityRole() { Name = RoleTypes.Admin });
identityRoles.Add(new IdentityRole() { Name = RoleTypes.Secretary });
identityRoles.Add(new IdentityRole() { Name = RoleTypes.User });
foreach(IdentityRole role in identityRoles)
{
manager.Create(role);
}
// Initialize default user
var store = new UserStore<ApplicationUser>(context);
var manager = new UserManager<ApplicationUser>(store);
ApplicationUser admin = new ApplicationUser();
admin.Email = "admin@admin.com";
admin.UserName = "admin@admin.com";
manager.Create(admin, "1Admin!");
manager.AddToRole(admin.Id, RoleTypes.Admin);
// Add code to initialize context tables
base.Seed(context);
}
在您的Global.asax.cs上,您应该注册数据库初始化程序
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
Database.SetInitializer(new MyDBInitializer());
}
请注意,有不同类型的数据库初始化策略,其行为取决于数据库初始化程序。请检查上面的链接。