在本地,我的代码运行正常。但是,当我尝试发布到Azure时,我收到以下错误:
'One or more errors occurred. (Maximum number of retries (5) exceeded while executing database operations with 'SqlServerRetryingExecutionStrategy'. See inner exception for the most recent failure.)'
错误发生在我的Startup.cs
文件的以下行中,用于为管理员用户设定种子:
ApplicationIdentityDbContext.CreateAdminAccount(app.ApplicationServices, Configuration).Wait();
这会调用静态方法:
public static async Task CreateAdminAccount(IServiceProvider serviceProvider, IConfiguration configuration)
{
UserManager<AppUser> userManager = serviceProvider.GetRequiredService<UserManager<AppUser>>();
RoleManager<IdentityRole> roleManager = serviceProvider.GetRequiredService<RoleManager<IdentityRole>>();
string username = configuration["Data:AdminUser:Name"];
string email = configuration["Data:AdminUser:Email"];
string password = configuration["Data:AdminUser:Password"];
string role = configuration["Data:AdminUser:Role"];
if (await userManager.FindByEmailAsync(email) == null)
{
if(await roleManager.FindByNameAsync(role) == null)
{
await roleManager.CreateAsync(new IdentityRole(role));
}
AppUser user = new AppUser
{
UserName = username,
Email = email
};
IdentityResult result = await userManager.CreateAsync(user, password);
if (result.Succeeded)
{
await userManager.AddToRoleAsync(user, role);
}
}
}
Name
,Email
,Password
和Role
属性位于我的appSettings.json
文件中,似乎设置正确。我已经检查了我的连接字符串和防火墙设置,一切似乎都没问题。
如果我注释掉导致错误的行,发布,然后尝试从网站注册数据库中的用户,我收到以下错误:
SqlException: Invalid object name 'AspNetUsers'.
我正在使用Identity来管理用户,而以前的应用程序会创建必要的表,如果它们不存在的话。这些应用程序不是.NET核心应用程序,但是......将.NET核心应用程序发布到Azure的策略根本不同吗?