Vla*_*ins 5 c# asp.net entity-framework lazy-loading async-await
我有这些域模型
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; }
}
Run Code Online (Sandbox Code Playgroud)
例如,我想暗示方法TestAsync,我想使用Topic对象和相关的Posts对象.
主题模型我可以使用async方法和topicId作为param.
public async Task<bool> TestAsync(int topicId)
{
var topic = await topicService.GetByIdAsync(topicId);
// posts ...
}
Run Code Online (Sandbox Code Playgroud)
我有两种方法,如何获得相关的帖子.但是,如果我将使用LazyLoading或只是另一个异步查询,有什么区别?
// Example: 1 (LazyLoading)
var posts = topic.Posts;
// OR Example: 2 (Async method)
var posts = await postService.GetAllByTopicIdAsync(topicId);
Run Code Online (Sandbox Code Playgroud)
所以,我认为Example:1将同步工作,并且我失去了async/await代码的所有优点.但是例子:2让我想到,这可能是我不知道Lazy Loading的所有魅力:)任何人都可以澄清我应该使用什么解决方案以及为什么?谢谢:)
延迟加载始终是同步的,这是不幸的.例如,EF Core具有异步优先心态,但尚未支持延迟加载.
其他选项是像Peter建议的那样进行连接(急切加载),异步执行单个查询; 或者做一个明确的第二次异步查询.您选择哪一个归结为您的模型通常如何使用.
就个人而言,如果模型总是一起使用,我会选择进行急切加载,否则会进行多次异步查询.我自己不使用延迟加载,但没有什么能阻止它工作.
| 归档时间: |
|
| 查看次数: |
2122 次 |
| 最近记录: |