C# 使用原始SQL加载实体

C# 使用原始SQL加载实体,c#,.net,entity-framework,ef-code-first,entity-framework-5,C#,.net,Entity Framework,Ef Code First,Entity Framework 5,我知道在实体框架中(代码优先)可以使用原始SQL加载实体,如: 但是,也可以使用此方法以某种方式急切地加载导航属性吗?我想编写一个自定义查询,加载一个复杂的实体并急切地加载其导航属性(使用EF和Includes的速度太慢了)。您需要首先将博客附加到上下文,然后显式加载所需的每个属性。据我所知,这需要单独完成,例如,在foreach中 foreach (var blog in blogs) { context.Blogs.Attach(blog); context.Entry(b

我知道在实体框架中(代码优先)可以使用原始SQL加载实体,如:


但是,也可以使用此方法以某种方式急切地加载导航属性吗?我想编写一个自定义查询,加载一个复杂的实体并急切地加载其导航属性(使用EF和
Includes
的速度太慢了)。

您需要首先将博客附加到上下文,然后显式加载所需的每个属性。据我所知,这需要单独完成,例如,在
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.
}

我也有同样的情况。我希望避免使用linq和include方法,并使用带急切加载的原始sql。原始sql的全部要点是绕过LinqToSql并强制EF执行您想要的语句。EF执行的唯一功能是反序列化输出。即时加载是LinqToSql特性,它会影响发送到服务器执行的结果SQL。你能详细说明你想用这种方法解决什么问题吗?你可以试试这个。var query=来自context.ContactSet.of type.Include(“从属”)中的emp,其中emp为员工选择emp;OfType子句将仅返回employee类型的对象,该类型的对象定义了从属导航属性。我认为这会有帮助。你是基于什么来解决.Include()的性能问题的。Include()肯定会更改SQL语句,但性能不应该比单独加载差。但是,不同之处可能在于,当您使用SqlQuery()手动加载时,EF不会像LinqToObject查询那样跟踪实体,这可能是造成差异的原因。您可以关闭对象跟踪,并查看它对性能的影响。
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.
}