使用Entity Framework SqlQuery填充子属性

Dir*_*irk 11 c# entity-framework-4.1

鉴于以下POCO Code First Entities

public class Customer
{
    public int CustomerId { get; set; }
    public string CustomerTitle { get; set; }
    public string CustomerFirstName { get; set; }
    public string CustomerLastName { get; set; }

    public ICollection<Order> Orders { get; set; }
}

public class Order
{
   public int OrderId { get; set; }
   ...
   public int CustomerId { get; set; }

   public Customer Customer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用linq,您可以使用Include属性获取填写的订单

var cust = (from cust in context.Customer
            where cust.CustomerId == 1
            select cust)
            .Include(ord => ord.Orders)
            .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

我试图使用paramaterised sql获得相同的结果,使用

        Customer co =  context.Customer.SqlQuery(
                    @"select [Customer].[CustomerId], 
                             ...
                             [Order].[OrderId] AS [OrderId], 
                             ...
                            from Customer join Order on Customer.CustomerId = Order.CustomerId where Customer.CustomerId = @custid", sqlParm)
                .FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

如何使用上面的命令填充co.Orders中的Orders,似乎我不能在SqlQuery中使用Include语句.这是一个非常简单的示例,仅用于说明目的,实际查询将更多地涉及.

Lad*_*nka 15

这根本不可能.直接SQL执行不提供导航属性的填充,您实际上不能使用Include.您必须执行两个单独的SQL查询才能获得Cutomer和她Orders.