C# ASP.NET MVC 5数据库更新
我正在初始化C# ASP.NET MVC 5数据库更新,c#,asp.net-mvc,entity-framework-migrations,C#,Asp.net Mvc,Entity Framework Migrations,我正在初始化IdentityConfig.cs文件中的网站用户和角色数据,当我添加了一个新模型,然后使用“代码优先添加迁移和更新数据库”命令将其映射到数据库时,我得到了一个空数据库: public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext> { protected override void Seed(ApplicationDbContext c
IdentityConfig.cs
文件中的网站用户和角色数据,当我添加了一个新模型,然后使用“代码优先添加迁移和更新数据库”命令将其映射到数据库时,我得到了一个空数据库:
public class ApplicationDbInitializer : DropCreateDatabaseIfModelChanges<ApplicationDbContext>
{
protected override void Seed(ApplicationDbContext context)
{
InitializeIdentityForEF(context);
base.Seed(context);
}
// Create User=aadmin2018@mail.com with Admin2018@mail.com in the Admin role
public static void InitializeIdentityForEF(ApplicationDbContext db)
{
var userManager = HttpContext.Current.GetOwinContext().GetUserManager<ApplicationUserManager>();
var roleManager = HttpContext.Current.GetOwinContext().Get<ApplicationRoleManager>();
const string name = "admin2018@mail.com";
const string password = "Admin2018@mail.com";
const string roleName = "Admin";
// Create role Admin if it does not exist
var role = roleManager.FindByName(roleName);
if (role == null)
{
role = new IdentityRole(roleName);
var roleresult = roleManager.Create(role);
}
var user = userManager.FindByName(name);
if (user == null)
{
user = new ApplicationUser
{
UserName = name,
Email = name,
FirstName = "Admin",
LastName = "Admin",
DateOfBirth = new DateTime(2015, 1, 1),
Address = new Address
{
AddressLine1 = "1 Admin Street",
Town = "Town",
County = "County",
Postcode = "PostCode"
}
};
var result = userManager.Create(user, password);
result = userManager.SetLockoutEnabled(user.Id, false);
}
// Add user admin to Role Admin if not already added
var rolesForUser = userManager.GetRoles(user.Id);
if (!rolesForUser.Contains(role.Name))
{
var result = userManager.AddToRole(user.Id, role.Name);
}
// Create users role
const string userRoleName = "Users";
role = roleManager.FindByName(userRoleName);
if (role == null)
{
role = new IdentityRole(userRoleName);
var roleresult = roleManager.Create(role);
}
}
}
公共类应用程序BinInitializer:DropCreateDatabaseIfModelChanges
{
受保护的重写无效种子(ApplicationDbContext上下文)
{
InitializeIdentityFore(上下文);
种子(上下文);
}
//创建用户=aadmin2018@mail.com具有Admin2018@mail.com在管理员角色中
公共静态void initializedEntityForef(ApplicationDbContext数据库)
{
var userManager=HttpContext.Current.GetOwinContext().GetUserManager();
var rolemager=HttpContext.Current.GetOwinContext().Get();
常量字符串名称=”admin2018@mail.com";
常量字符串密码=”Admin2018@mail.com";
常量字符串roleName=“Admin”;
//如果角色Admin不存在,则创建该角色
var role=rolemager.FindByName(roleName);
如果(角色==null)
{
角色=新的识别码(roleName);
var roleresult=rolemanger.Create(角色);
}
var user=userManager.FindByName(名称);
if(user==null)
{
用户=新应用程序用户
{
用户名=名称,
Email=姓名,
FirstName=“Admin”,
LastName=“Admin”,
DateOfBirth=新的日期时间(2015,1,1),
地址=新地址
{
AddressLine1=“1行政街”,
Town=“Town”,
County=“County”,
Postcode=“Postcode”
}
};
var result=userManager.Create(用户,密码);
结果=userManager.SetLockoutEnabled(user.Id,false);
}
//将用户管理员添加到角色管理员(如果尚未添加)
var rolesForUser=userManager.GetRoles(user.Id);
如果(!rolesForUser.Contains(role.Name))
{
var result=userManager.AddToRole(user.Id,role.Name);
}
//创建用户角色
常量字符串userRoleName=“Users”;
role=rolemager.FindByName(userRoleName);
如果(角色==null)
{
role=新的IdentityRole(userRoleName);
var roleresult=rolemanger.Create(角色);
}
}
}
我应该对代码做哪些更改,以便这些数据返回数据库?迁移的Up()代码为空?您的ApplicationDbContext是否从IdentityDbContext继承?是的,我的ApplicationDbContext从IdentityDbContext继承,我的迁移的Up()代码包含所有表的创建,并且它们在数据库中为空,没有上面发布的代码段中指定的值。是否尝试删除数据库?初始化器Seed()仅在您更改模型或没有数据库时运行。每次更新数据库时都会运行不同的Seed()迁移方法。能否指定要引用的文件/文件夹的名称。Seed将仅在创建数据库时运行,而不会更新数据库。看这里