【发布时间】:2016-07-20 19:19:17
【问题描述】:
我已经开始创建一个新的 aspnet core 1 应用程序并完成了足够的工作以部署到 azure。我能够将我的本地数据库复制到一个 azure sql 数据库并部署我的应用程序。当我在本地(VS2015)针对 azure sql 数据库运行我的应用程序时,该应用程序运行良好。当我从 azure 对 azure sql db 运行应用程序时,登录应用程序后出现以下错误。
处理请求时数据库操作失败。
InvalidOperationException: 已经有一个打开的 DataReader 与必须先关闭的此命令相关联。有 ApplicationDbContext 的待定模型更改在 Visual Studio 中,使用 包管理器控制台为这些 更改并将它们应用到数据库:
PM> Add-Migration [迁移名称] PM> Update-Database 或者, 您可以搭建一个新的迁移并从命令提示符处应用它 你的项目目录:
dotnet ef 迁移添加 [迁移名称] dotnet ef 数据库更新
为我的每个上下文运行更新数据库成功完成,但没有解决问题。
我很乐意分享所需的任何其他信息。
编辑 #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;
}
【问题讨论】:
-
您使用什么库来访问数据库?您使用的是实体框架或类似的 ORM,还是普通的 SqlConnection?多个活动结果集肯定会有所帮助,但这种失败通常意味着您的 SqlConnection 有问题。
-
应用程序正在使用 EF Code First
标签: azure ef-code-first asp.net-core azure-sql-database