使用原始SQL提前加载实体

本文关键字:加载 实体 SQL 原始 | 更新日期: 2023-09-27 18:18:24

我知道这是可能的,在实体框架(代码优先)加载一个实体使用原始SQL像这样:

using (var context = new BloggingContext())
{
    var blogs = context.Blogs.SqlQuery("SELECT * FROM dbo.Blogs").ToList();
}

但是,是否有可能以某种方式急切加载导航属性使用这个方法,以及?我想写一个自定义查询,加载一个复杂的实体,并急切地加载其导航属性(使用EF与Includes已被证明太慢)。

使用原始SQL提前加载实体

首先需要将博客附加到上下文,然后显式加载所需的每个属性。据我所知,这需要单独完成,例如,在foreach中。

foreach (var blog in blogs)
{
    context.Blogs.Attach(blog);
    context.Entry(blog).Collection(a => a.Comments).Load();
    context.Entry(blog).Reference(a => a.Author).Load();
    // Here you can use blog.Author and blog.Comments with no problem.
}