我已经开始创建一个新的aspnet核心1应用程序,并已完成部署到azure。我能够将我的本地数据库复制到azure sql db并部署我的应用程序。当我在本地(VS2015)针对azure sql数据库运行我的应用程序时,该应用程序正常工作。当我从azure对着azure sql db运行应用程序时,登录到应用程序后出现以下错误。
处理请求时数据库操作失败。
InvalidOperationException:已经有一个打开的DataReader 与此命令关联,必须先关闭。有 ApplicationDbContext的待定模型更改在Visual Studio中,使用 程序包管理器控制台为这些程序架构新的迁移 更改并将其应用于数据库:
PM>添加迁移[迁移名称] PM>更新数据库或者, 您可以构建一个新的迁移并从命令提示符处应用它 你的项目目录:
dotnet ef迁移添加[迁移名称] dotnet ef数据库更新
为我的每个上下文运行Update-Database都已成功完成,但无法解决问题。
我很乐意分享所需的任何其他信息。
编辑#1:添加了代码示例
public class CompaniesController : Controller
{
private readonly SEESContext _context;
private readonly IEmailSender _emailSender;
private readonly UserManager<ApplicationUser> _userManager;
public CompaniesController(
SEESContext context,
IEmailSender emailSender,
UserManager<ApplicationUser> userManager)
{
_context = context;
_emailSender = emailSender;
_userManager = userManager;
}
// GET: Companies/MyCompany/
[Authorize(Roles = RoleNames.CompanyAdministrator)]
public async Task<IActionResult> MyCompany(string sortOrder, string searchEmployee)
{
var company = await _context.Companies.SingleOrDefaultAsync(m => m.CompanyID == Convert.ToInt32(User.Identity.GetCompanyId()));
var model = new MyCompaniesModel(company);
model = await PopulateEmployeeData(sortOrder, searchEmployee, company, model);
model = PopulateJobData(company, model);
return View(model);
}
private async Task<MyCompaniesModel> PopulateEmployeeData(string sortOrder, string searchEmployee, Company company, MyCompaniesModel model)
{
ViewBag.NameSortParm = string.IsNullOrEmpty(sortOrder) ? "name_desc" : "";
ViewBag.RoleSortParm = sortOrder == "role_asc" ? "role_desc" : "role_asc";
var employeeViewModels = new List<EmployeeViewModel>();
var users = _userManager.Users.Where(x => x.CompanyID == company.CompanyID);
foreach (var user in users)
{
var roles = await _userManager.GetRolesAsync(user);
employeeViewModels.Add(new EmployeeViewModel { Id = user.Id, Name = user.FullName, Role = roles[0] });
}
if (!string.IsNullOrEmpty(searchEmployee))
{
employeeViewModels = employeeViewModels.Where(s => s.Name.Contains(searchEmployee)).ToList();
}
switch (sortOrder)
{
case "name_desc":
employeeViewModels = employeeViewModels.OrderByDescending(x => x.Name).ToList();
break;
case "role_desc":
employeeViewModels = employeeViewModels.OrderByDescending(x => x.Role).ToList();
break;
case "role_asc":
employeeViewModels = employeeViewModels.OrderBy(x => x.Role).ToList();
break;
default:
employeeViewModels = employeeViewModels.OrderBy(s => s.Name).ToList();
break;
}
model.Employees = employeeViewModels.ToList();
return model;
}
private MyCompaniesModel PopulateJobData(Company company, MyCompaniesModel model)
{
var jobs = _context.Jobs.Where(x => x.CompanyId == company.CompanyID && x.IsActive).OrderBy(x => x.Name).ToList();
var jobViewModels = jobs.Select(job => new JobViewModel { Id = job.JobId, Name = job.Name }).ToList();
model.Jobs = jobViewModels.ToList();
return model;
}