2016-07-20 6 views
0

새로운 aspnet core 1 애플리케이션을 만들기 시작했고 하늘빛으로 배포하기에 충분했습니다. 내 로컬 DB를 하늘빛 SQL DB에 복사하고 내 응용 프로그램을 배포 할 수있었습니다. azure SQL 데이터베이스에 대해 내 로컬로 응용 프로그램을 실행할 때 (VS2015) 응용 프로그램이 올바르게 작동합니다. Azure SQL DB에 대해 하늘빛에서 응용 프로그램을 실행하면 응용 프로그램에 로그인 한 후 다음 오류가 발생합니다.Azure 사이트에서 데이터베이스 연결 오류가 발생했습니다.

요청을 처리하는 동안 데이터베이스 작업이 실패했습니다.

InvalidOperationException :이 Command와 연결된 열린 DataReader 인 이 먼저 닫혀 있어야합니다. > 마이그레이션을 추가 [이전 이름] PM> 업데이트

PM : Visual Studio에서 ApplicationDbContext에 대한 중인 모델 변경이 변화를위한 새로운 마이그레이션을 스캐 폴딩 할 패키지 관리자 콘솔을 사용하여 데이터베이스에 적용 할 수 있습니다 - 데이터베이스 또는 가 새 마이그레이션을 스캐 폴딩 및 에서 명령 프롬프트에서 프로젝트 디렉토리를 적용 할 수 있습니다 :

후에 .NET 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; 
    } 
+0

어떤 라이브러리 것은 당신이 DB에 액세스하는 데 사용하는 게으른 로딩에서 발생하는 경우

  • Include를 사용해보십시오 쿼리에 대해 동일한 DbContext 인스턴스를 주입 시도? Entity Framework 또는 유사한 ORM을 사용하고 있습니까? 아니면 일반 SqlConnection입니까? 여러 개의 활성 결과 집합이 도움이되지만 일반적으로이 오류는 SqlConnection에 문제가 있음을 의미합니다. –

  • +0

    응용 프로그램에서 EF 코드를 사용 중입니다. –

    답변

    0
    • 제안 here으로 enabling 다중 활성 결과 집합 (MARS)를보십시오.
    • 모든 데이터베이스가 문제가
    +0

    MARS가 켜져 있습니다! –

    +0

    그런 다음 블록을 사용하여 함수 호출에 추가 DbContext 인스턴스를 배치하여 시도 할 것입니다. 모든 저장소에서 동일한 DbContext 인스턴스를 삽입하고 한 곳에서 저장하면 내 시나리오에서도 도움이되었습니다. – Ankit

    +0

    asp.net 코어를 사용하고 있기 때문에 주입이 컨트롤러에서 일어나고 있습니다. 나는 하늘에서 작동하지 않지만 로컬에서 로그인 한 후에 호출되는 코드를 보여주기 위해이 질문을 편집 할 것이다. –

    관련 문제