我有這些領域模型實體框架 - 延遲加載或額外的異步/等待查詢方法?
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; }
}
比如我想impliment方法TestAsync,還有我想Topic對象和相關文章的對象打交道。
主題模型我可以使用async方法和topicId作爲參數。
public async Task<bool> TestAsync(int topicId)
{
var topic = await topicService.GetByIdAsync(topicId);
// posts ...
}
我有兩種方法,如何獲得相關的帖子。 但是,如果我將使用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或懶加載imho之間的選擇。這是向數據庫發出兩個查詢(使用延遲加載)或在sql中加入連接(使用Include進行加載加載)之間的選擇。 –
David,但是在許多文章中,async/await建議使用它來處理與數據庫一起工作的方法,因爲此時線程返回到線程池。 Peter,Eager Loading可以是一個解決方案,謝謝! –