🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

Q&A

解決済

1回答

4211閲覧

ASP.NET COREでAspNetUsersの一覧取得にawait、ToListAsync()が指定できない

woodcube

総合スコア32

.NET Core

.NET Coreは、マネージソフトウェアフレームワークでオープンソースで実装されています。クロスプラットフォームを前提に考えられており、Windows/Mac/Linuxで動くアプリケーションを作成することが可能です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

0グッド

0クリップ

投稿2021/02/18 01:27

編集2021/02/18 01:29

前提・実現したいこと

Identityの認証機能で作成されるユーザ情報のdbo.AspNetUsersのテーブルを一覧表示しようとしていますが、
awaitとToListAsync()がコンパイルエラーになってしまう。
(ToListでなら一覧表示できています)

発生している問題・エラーメッセージ

CS1061 'List<App01StoreFindUser>' に 'GetAwaiter' の定義が含まれておらず、 型 'List<App01StoreFindUser>' の最初の引数を受け付けるアクセス可能な拡張メソッド 'GetAwaiter' が見つかりませんでした。 using ディレクティブまたはアセンブリ参照が不足していないことを確認してください

該当のソースコード

C#

1using System; 2using System.Collections.Generic; 3using System.Linq; 4using System.Threading.Tasks; 5using Microsoft.AspNetCore.Mvc; 6using Microsoft.AspNetCore.Mvc.RazorPages; 7using App01StoreFind.Areas.Identity.Data; 8 9namespace App01StoreFind.Pages 10{ 11 public class UserListModel : PageModel 12 { 13 private readonly App01StoreFind.Data.App01StoreFind_IdentityContext _context; 14 15 public UserListModel(App01StoreFind.Data.App01StoreFind_IdentityContext context) 16 { 17 _context = context; 18 } 19 public IList<App01StoreFindUser> App01StoreFindUser { get; set; } 20 public void OnGet() 21 { 22 App01StoreFindUser = _context.App01StoreFindUser.ToList(); 23 } 24 public async Task OnGetAsync() 25 { 26 App01StoreFindUser = await _context.App01StoreFindUser.ToListAsync(); //←エラー 27 } 28 } 29}

試したこと

自分で作成したモデルからスキャフォールディングで「EntityFrameworkを使用するRazorページ(CRUD)」で作成できたPages\Index.cshtmlを参考に、AspNetUsersのIndexを作成しようとしました。

C#

1 //App01StoreFindUserは「public class App01StoreFindUser : IdentityUser」で作られてます 2 public class App01StoreFind_IdentityContext : IdentityDbContext<App01StoreFindUser> 3 { 4 public App01StoreFind_IdentityContext(DbContextOptions<App01StoreFind_IdentityContext> options) 5 : base(options) 6 { 7 } 8 public DbSet<App01StoreFind.Areas.Identity.Data.App01StoreFindUser> App01StoreFindUser { get; set; } 9    //↑追加しました   10 protected override void OnModelCreating(ModelBuilder builder) 11 { 12 base.OnModelCreating(builder); 13 } 14 }

これで、1つ目のソースコードのOnGet()のToList()では一覧が取得できています。

補足情報(FW/ツールのバージョンなど)

OnGet()のToList()ではDBにアクセスして一覧が取れるのですが、
OnGetAsync()ではToListAsyncが無いコードが書けません。

自分で作成したモデルのToListAsync()の定義を調べると「EntityFrameworkQueryableExtensions」であり、ToListAsyncがあるのですが、
AspNetUsers(には正確には継承したApp01StoreFindUser)のToList()の定義を調べると「Enumerable」です。

ここの違いでToListAsyncが無いのだとは思うのですが、この違いがどこの時点から起きているのかが良くわかりません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

using Microsoft.EntityFrameworkCore; を追加してください。

【追記】

何に属するのか分からない時はオブジェクトブラウザーを使ってみてください。

イメージ説明

【参考】

非同期 LINQ 演算子
https://docs.microsoft.com/ja-jp/ef/core/miscellaneous/async#async-linq-operators

"重要 EF Core の非同期拡張メソッドは、Microsoft.EntityFrameworkCore 名前空間で定義されています。 メソッドを使用可能にするには、この名前空間がインポートされている必要があります。"

投稿2021/02/18 02:22

編集2021/02/18 03:51
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

woodcube

2021/02/18 04:19

無事、動くようになりました。 ありがとうございます。 自分で悩んでいる間は、あちこち検索しても有力な手掛かりが見つけられない(調べ方がヘタなだけ)のですが、教えていただくとその後はスッキリと合点がいったり、調べられるようになります。 いつも素早い回答と的確な情報をありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問