Microsoft.EntityFrameworkCore
ネーム
Microsoft.EntityFrameworkCore
名前空間はasync
拡張メソッドを含みます。その名前空間はMicrosoft.EntityFrameworkCore
パッケージに含まれています。ここにはthe source on GitHubがあり、ここにそのasync
拡張メソッドがあります。
AnyAsync()
AllAsync()
CountAsync()
LongCountAsync()
FirstAsync()
FirstOrDefaultAsync()
LastAsync()
LastOrDefaultAsync()
SingleAsync()
SingleOrDefaultAsync()
MinAsync()
MaxAsync()
SumAsync()
AverageAsync()
ContainsAsync()
ToListAsync()
ToArrayAsync()
LoadAsync()
ToDictionaryAsync()
ForEachAsync()
使用例
project.json
"Microsoft.EntityFrameworkCore": "1.0.0",
ApplicationUserRepository.cs
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
namespace MyApplication.Models {
public class ApplicationUserRepository : IApplicationUserRepository
{
private ApplicationDbContext _dbContext;
public ApplicationUserRepository(ApplicationDbContext dbContext) {
_dbContext = dbContext;
}
public async Task<ApplicationUser> Find(Guid id)
{
return await _dbContext.Users.SingleAsync(u => u.Id == id);
}
public async Task<IEnumerable<ApplicationUser>> GetAll()
{
return await _dbContext.Users.ToListAsync();
}
}
}
通常、コレクションの評価とコレクションの即時メモリへの配置に合わせてMyCollection.ToList()(asyncなど)を呼び出すことはありません。リストではなくIEnumberable/IQueryableを返すことができます。このようにしてクエリを実行し、実行するだけですぐに使用できます。 ToAsyncEnumerable/ToAsyncQueryableソリューションが欠けているようです。 – DanAbdn
@DanAbdn 'MoveNext()'はタスクをサポートしていないので、非同期にする必要があるビットであるため、 'IEnumerable'インターフェイスは非同期を許可しないので、あなたのやり方をすることはできません。したがって、非同期を使用する必要がある場合、唯一の方法は 'ToListAsync()'でしょう。あるいは、 '.Select(x => x.Id).ToListAsync()'を使ってすべてのidを選択し、 'FirstAsync()'を使って各項目を取得することができます。 –
これは 'ToAsAsync'よりも遅くなります。それぞれのFirstAsyncは新しいSQLクエリになります。 –