我有这些领域模型
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; }
}
例如,我想实现 TestAsync 方法,在那里我想使用 Topic 对象和相关的 Posts 对象。
我可以使用异步方法和 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 将同步工作,而且我失去了 async/await 代码的所有优点。
但示例:2让我想,这可能是我不知道延迟加载的所有魅力:)
谁能澄清我应该使用什么解决方案以及为什么?谢谢:)
延迟加载总是同步的,这是不幸的。例如,EF Core 以其异步优先的心态,目前还不支持延迟加载。
其他选项包括按照 Peter 建议进行连接(预加载),异步执行单个查询;或者执行显式的第二个异步查询。您选择哪一个取决于您的模型通常如何使用。
就我个人而言,如果模型始终一起使用,我会选择执行预先加载,否则执行多个异步查询。我自己不使用延迟加载,尽管没有什么可以阻止它工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)