【发布时间】:2021-06-17 20:13:34
【问题描述】:
我的应用没有将数据播种到控制器中的数据库。 它会创建数据库,但不会播种数据。
[HttpGet("NewDb/{dbName}")]
public void CreateNewDb(string dbName)
{
var optionsBuilder = new DbContextOptionsBuilder<DataContext>()
.UseMySql("server=localhost; user=username; password=password;database=" + dbName,
new MySqlServerVersion(new Version(8, 0, 21)));
DataContext context = new DataContext(optionsBuilder.Options);
context.Database.Migrate();
// where seed is not seeding the database.
Seed.SeedRoles(context, _roleManager);
}
种子.cs 这是创建角色的地方
public static void SeedRoles(DataContext context, RoleManager<Role> roleManager)
{
if (!context.Roles.Any())
{
//create roles
var roles = new List<Role>
{
new Role{Name = "Admin"},
new Role{Name = "Standard"},
new Role{Name = "Basic"}
};
foreach (var role in roles)
{
roleManager.CreateAsync(role).Wait();
}
}
}
【问题讨论】:
-
你能把你的种子类的代码贴出来吗?
-
我已经发布了种子类
-
是该表支持的角色 - 如果您想播种 ef 核心已内置种子支持
-
如果你能提供帮助,你永远不应该使用 .Wait() 。当您调用返回 Task 或 Task
的方法时,您应该 await该方法。这意味着 SeedRoles 需要标记为异步并返回一个任务,并且您的 CreateNewDb 操作方法应标记为异步并返回一个任务并使用await调用返回任务的方法,例如 Seed.SeedRoles。 -
看起来你想做的事,你需要做的就是打电话给
context.SaveChangesAsync();
标签: c# asp.net .net asp.net-core .net-5