ASP.NET MVC를 Entity Framework와 함께 사용하고 있습니다. "AllUserData"라는 엔티티가 있습니다. "Genres"라는 두 번째 엔티티가 있습니다. 테이블의 각 행은 장르입니다.탐색 속성이있는 ToListAsync() 사용
이 두 엔티티는 일대 다 관계가 있습니다. 그래서 "AllUserData"클래스의 클래스 정의에서, 나는 public 가상 ICollection PreferredGenres {get; 세트; }
나는 성공적으로 내가 비주얼 스튜디오는 말한다
AllUserData aud = db.AllUserData.Single(b => b.UserId == currentUserId);
var chosengenres = await aud.PreferredGenres.ToListAsync()
는 "ICollection에이 'ToListAsync'에 대한 정의가 포함되어 있지 않습니다 사용할 수 없습니다 그러나
AllUserData aud = db.AllUserData.Single(b => b.UserId == currentUserId);
var chosengenres = aud.PreferredGenres.ToList()
를 사용하여 각 사용자가 선호하는 장르를 읽을 수 있어요 및 최상의 확장 메서드 과부하 'QueryableExtensions.ToListAsync (IQueryable)'형식의 수신기가 필요합니다. 'IQueryable'
왜 이런 일이 발생합니까? 두 경우의 차이점은 ToList()를 사용하고 ToListAsync()를 사용한다는 것입니다.
비동기 메서드를 탐색 속성과 함께 사용할 수 있습니까? 실생활 애플리케이션에는 다양한 개체간에 관계가있는 경우가 많이 있습니다. 이러한 관계를 사용하여 속성에 액세스 할 때 비동기 메서드를 사용할 수 있습니까? 이것 주위에 어떤 방법이 있습니까? 나는 가능한 한 비동기 적으로 일을하고 싶습니다.
특히 IQueryable을 사용한다는 것은 ToListAsync가 서버에서 쿼리가 실행될 때까지 기다릴 필요가 없다는 것을 의미합니다.이 점이 중요합니다. 즉, 쿼리를 배경이 완성되고 완료되면 코드의 현재 지점으로 돌아옵니다. – daf
실제로 여기에 게시하기 전에 "audwa.PreferredGenres.AsQueryable(). ToAsAsync()"를 기다렸습니다. VS가 불평하지는 않았지만 실제로 실행하려고 시도했을 때 런타임에 예외가 발생했습니다. 어떤 이유로 든 작동하지 않는 것 같습니다. Select()를 사용하는 대안이 있다고하셨습니다. ToListAsync() 전에 호출해야한다는 뜻인가요? – Gary
FYI, AsQueryable()을 사용할 때받은 오류. ToListAsync()가 - "소스 IQueryable이 IDbAsyncEnumerable을 구현하지 않았습니다. IDbAsyncEnumerable을 구현하는 소스 만 Entity Framework 비동기 작업에 사용할 수 있습니다. 자세한 내용은 http://go.microsoft.com/fwlink/?LinkId=287068을 참조하십시오. " –
Gary