0

MVC5 인터넷 응용 프로그램을 코딩 중이며 EF6을 사용하고 있습니다.EF6 - 이미이 명령과 관련된 열려있는 DataReader가 있습니다. 먼저 닫아야합니다.

Asset 개체를 편집 할 때 호출되는 EditActionResult이 있습니다. Asset 개체를 편집 할 때 다른 개체 값을 업데이트해야합니다. UpdateAssociatedAssetObjects 함수가이 작업을 수행합니다. 다음 코드 줄에 UpdateAssociatedAssetObjects 기능에

There is already an open DataReader associated with this Command which must be closed first. 

:

나는 다음과 같은 오류가 발생하고 여기에

if (item.mapMarker.Id == asset.Id) 

Edit ActionResult입니다 : 여기

[HttpPost] 
[ValidateAntiForgeryToken] 
public async Task<ActionResult> Edit(AssetViewModel assetViewModel) 
{ 
    if (ModelState.IsValid) 
    { 
     db.Entry(assetViewModel.asset).State = EntityState.Modified; 
     assetViewModel.asset.lastUpdate = DateTime.Now; 
     if (assetViewModel.asset.linkFromExternalResource) 
     { 
      assetViewModel.asset.webAddress = assetViewModel.webAddress; 
     } 
     else 
     { 
      assetViewModel.asset.webAddress = assetViewModel.filename; 
     } 
     db.Entry(assetViewModel.asset).Property(uco => uco.creationDate).IsModified = false; 
     db.Entry(assetViewModel.asset).Property(uco => uco.userName).IsModified = false; 
     assetService.UpdateAssociatedAssetObjects(db, assetViewModel.asset); 
     await db.SaveChangesAsync(); 
     return RedirectToAction("Index"); 
    } 
    return View(assetViewModel); 
} 

UpdateAssociatedAssetObjects 함수입니다.

public void UpdateAssociatedAssetObjects(CanFindLocationDatabaseContext db, Asset asset) 
{ 
    foreach (var item in db.mapLocations) 
    { 
     if (item.mapMarker.Id == asset.Id) 
     { 
      item.lastUpdate = DateTime.Now; 
     } 
    } 
} 

이 코드에 도움이 될만한가 있나요?

await db.SaveChangesAsync() 다음에 UpdateAssociatedAssetObjects 함수를 배치하고 새 데이터베이스 컨텍스트 개체를 사용했지만 오류가 여전히 발생했습니다.

미리 감사드립니다.

+0

연결 문자열은 어떤 모양입니까? –

+0

연결 문자열이 모두 작동합니다. 개체가 성공적으로 추가 및 제거되고 있습니다. 연결 문자열에 문제가 있다고 생각합니까? – user3736648

+0

어쩌면, 그 이유는 내가 물었다. –

답변

0

컨트롤러 메소드에서 이미 asset 항목에 대한 db 연결을 여는 중입니다.

UpdateAssociatedAssetObjects에서 주 데이터베이스가 열려있는 동안 두 번째 데이터베이스 연결 읽기를 열려고합니다. 첫 번째 객체를 가져 오거나 두 번째 객체에서 목록을 가져옵니다.

다른 해결책은 db를 두 번 업데이트하는 것입니다.

관련 문제