我有这些领域模型实体框架 - 延迟加载或额外的异步/等待查询方法?
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可以是一个解决方案,谢谢! –