Web APIの開発にASP.NETコア2.2を使用しています。リポジトリクラスに次のメソッドがあります。
public async Task<Articles> AddAsync(Articles article)
{
return await _context.Articles.AddAsync(article);
}
次のエラーが表示されます。
Cannot implicitly convert type 'Microsoft.EntityFrameworkCore.ChangeTracking.EntityEntry<Author.Command.Persistence.DBContextAggregate.Articles>' to 'Author.Command.Persistence.DBContextAggregate.Articles'
ここでは、AddAsyncバージョンを使用してデータを保存しようとしています。
この問題を解決するためのガイダンスを提供してくれる人はいますか?
AddAsync
メソッドは、提供された型だけを返すわけではありません。あなたの場合はArticles
です。 Task<EntityEntry>
返します。問題を修正するには、コードを次のように変更します。
public async Task<Articles> AddAsync(Articles article)
{
await _context.Articles.AddAsync(article);
return article;
}
EFCoreは提供されたエンティティを追跡するため、記事インスタンスに加えられた変更は保持されます。詳細については、 MSDNを参照してください。
基本的には、
Articles
インスタンスがDBContextのDBSetに追加されます。主キーが自動的に生成される場合、AddAsyncメソッドを提供したインスタンスに実際に設定されます。
Chris Pratt
がドキュメントから言及したように
Blockquotehisメソッドは、「Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo」で使用されるような特別な値ジェネレーターがデータベースに非同期的にアクセスできるようにするためだけに非同期です。他のすべての場合には、非非同期メソッドを使用する必要があります。
そのため、代わりに同期バージョンのAdd
使用する必要があります。
したがって、コードは次のようになります。
public Articles Add(Articles article)
{
_context.Articles.Add(article);
return article;
}