2017-05-18 1 views
2

VS 코드를 사용하고 ASP.NET Core/EF Core 자습서를 따르고 있으며 명확하지 않습니다. 비동기, 대기 및 작업 방법에 대해 설명합니다 (처음 두 개는 알고 있지만 세 번째는 아는 것은 아닙니다.) 저는 처음으로 저장소를 구현하고 UnitofWork 클래스와 인터페이스를 함께 구현할 것입니다. 여기의 UnitOfWork 클래스는 다음과 같습니다해결 방법 : 비동기 메서드의 반환 유형을 void, 작업 또는 작업이어야합니다. <T> [AppName]

나는 CompleteAsync 액션 이름 위에 마우스를 가져 가면 VS-코드 인텔리로 표시되는 주제 줄 오류에 추가
using System.Threading.Tasks; 

namespace vega.Persistence 
{ 
    public class UnitOfWork : IUnitOfWork 
    { 
    private readonly VegaDbContext context; 

    public UnitOfWork(VegaDbContext context) 
    { 
     this.context = context; 
    } 

    public async Task CompleteAsync() 
    { 
     await context.SaveChangesAsync(); 
    } 
    } 
} 

, 내가 얻을이 :

'UnitOfWork.CompleteAsync()': not all code paths return a value [AppName] 

다른 아마 관련 조각 : 내 Startup.cs에서

using System; 
using System.Threading.Tasks; 

namespace vega.Persistence 
{ 
    public interface IUnitOfWork 
    { 
     Task CompleteAsync(); 
    } 
} 

:

public void ConfigureServices(IServiceCollection services) 
{ 
    // Add Repository and UnitOfWork --scoped (instance persits for life of request), 
    // not Transient or Singleton 
    services.AddScoped<IVehicleRepository, VehicleRepository>(); 
    services.AddScoped<IUnitOfWork, UnitOfWork>(); 
} 
+0

정말 이상합니다. 코드에 문제가없는 것 같습니다. 아마도 VS 코드의 버그 일 수 있습니다. 오류 메시지가 나타나면 프로젝트가있는 폴더에서'dotnet build'를 실행 해 보셨습니까? 그건 그렇고, EF를 사용할 때 작업 단위를 작성하는 것은별로 유용하지 않습니다. DataContext는 이미 UnitOfWork 구현입니다. DataContext를 컨트롤러 밖으로 유지하려면 서비스를 작성해야합니다. – Gimly

+0

예. => '빌드가 실패했습니다. Persistence \ UnitOfWork.cs (14,23) : 오류 CS1983 : 비동기 메서드 의 반환 유형은 무효이어야합니다. 작업 또는 작업 [C : \ Users \ .. \ Vega.csproj] 0 경고) 1 오류 ( – PakiPat

+0

) 또한 프로젝트를 복원하고 VS 코드를 다시 시작했습니다. – PakiPat

답변

3

다른 vega.Persistence.Task 유형이 프로젝트에 정의되어 있습니다. 그냥 방법의 반환 형식으로 System.Threading.Tasks.Task 해결하기 위해 네임 스페이스를 추가합니다

public async System.Threading.Tasks.Task CompleteAsync() 
{ 
    await context.SaveChangesAsync(); 
} 

과 같은

당신의 인터페이스.

+0

시도했지만이 : ' 'System.Threading.Tasks.Task '형식을 'vega.Persistence.Task'로 암시 적으로 변환 할 수 없음 [Vega] ' – PakiPat

+0

이것은 컨텍스트가'Persistence '이고 내 실제는 아니라는 것을 의미합니까? DbContext 객체? – PakiPat

+3

그럼 당신은 당신 자신의 질문에 대답했습니다. Task라는 2 개의 클래스가 있고 코드는 아마 vega.Persistence.Task 대신 System.Threading.Tasks.Task ... – Marko

관련 문제