Azure站点

时间:2016-07-20 19:19:17

标签: azure ef-code-first asp.net-core azure-sql-database

我已经开始创建一个新的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;
    }

1 个答案:

答案 0 :(得分:0)

  • 按建议enabling尝试here多个有效结果集(MARS)。
  • 尝试为所有数据库查询注入相同的DbContext实例
  • 如果出现延迟加载问题,请尝试使用Include