私はトピックのオブジェクトと関連記事オブジェクトを操作したいが、方法TestAsyncをimplimentしたいこれらのドメインモデルに例えばEntity Framework - 遅延読み込みまたは追加の非同期/待機クエリメソッド?
public class Topic
{
public int TopicId { get; set; }
public virtual ICollection<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public int? TopicId { get; set; }
public virtual Topic Topic { get; set; }
}
を持っています。
トピックモデル私はasyncメソッドとtopicIdをparamとして使用できます。
public async Task<bool> TestAsync(int topicId)
{
var topic = await topicService.GetByIdAsync(topicId);
// posts ...
}
私は2つの方法、関連する投稿を取得する方法があります。 LazyLoadingまたは別の非同期クエリを使用する場合の違いは何ですか?
// Example: 1 (LazyLoading)
var posts = topic.Posts;
// OR Example: 2 (Async method)
var posts = await postService.GetAllByTopicIdAsync(topicId);
だから、私は例だと思います:1意志が同期動作し、また、私は非同期のすべての利点を失うこと/コードを待ちます。 例:2は私に、レイジーロードのすべての魅力を知っているとは思わないかもしれません:) 誰にどのようなソリューションを使用すべきか、なぜそれを明確にすることができますか?ありがとう:)
ASP.NETでのデータベースアクセスのasync/awaitコードの「利点」は、率直には最小限です。 –
async/awaitまたはlazy loading imhoのどちらかを選択することはできません。これは、データベースへの2つのクエリの実行(遅延読み込みを使用)またはSQLでの結合(Includeを使用したeager読み込み)のいずれかを選択するものです。 –
Davidしかし、多くの記事では、この時点でスレッドがスレッドプールに戻るため、データベースで動作するメソッドでの作業にasync/awaitを使用することをお勧めします。 Peter、Eager読み込みが解決策になることができます、ありがとう! –