设置所有上下文。
accessTokenContext.Database.EnsureCreated();
userContext.Database.EnsureCreated();
userGroupContext.Database.EnsureCreated();
permissionContext.Database.EnsureCreated();
roleContext.Database.EnsureCreated();
它只创建了一些表。
我希望它创建所有表。然而它只创造了 4 个。
您对所有 DbContext 使用相同的数据库(connectionString)。但
EnsureCreated()
只是检查数据库是否不存在,它将创建。因此,在第一个accessTokenContext.Database.EnsureCreated();
之后,它将识别为数据库已存在,因此不会再创建。 (这里可能会出现一些延迟情况)。 因此您不能将
EnsureCreated()
用于同一数据库中的多个上下文。相反,您可以尝试以下解决方法。
accessTokenContext.Database.EnsureCreated();
try
{
RelationalDatabaseCreator databaseCreator2 = (RelationalDatabaseCreator)accessTokenContext.Database.GetService<IDatabaseCreator>();
databaseCreator2.EnsureCreated();
}
catch { }
try
{
RelationalDatabaseCreator databaseCreator3 = (RelationalDatabaseCreator)userGroupContext.Database.GetService<IDatabaseCreator>();
databaseCreator3.CreateTables();
}
catch { }
try
{
RelationalDatabaseCreator databaseCreator4 = (RelationalDatabaseCreator)permissionContext.Database.GetService<IDatabaseCreator>();
databaseCreator4.CreateTables();
}
catch { }
try
{
RelationalDatabaseCreator databaseCreator5 = (RelationalDatabaseCreator)roleContext.Database.GetService<IDatabaseCreator>();
databaseCreator5.CreateTables();
}
catch { }
说明:“RelationalDatabaseCreator”仅适用于现有数据库,因此使用“EnsureCreated”来确保数据库存在。当表已经存在时,“RelationalDatabaseCreator”将会出现异常,因此将它们放在“try catch”中