渴望加载包括派生类的导航属性

时间:2012-06-13 06:46:59

标签: entity-framework entity-framework-4 ef-code-first

示例类结构

class Order
{
    public int Id { get; set; }     
    public DateTime Date { get; set; }

    public List<OrderDetail> Details { get; set; }
}

class OrderDetail
{
    public int Id { get; set; }
    public int Qty { get; set; }

    public Item Item { get; set; }
}

class Item
{
    public int Id { get; set; }
    public string Name { get; set; }
}

class ElectronicItem : Item
{
    public MoreDetail Detail { get; set; }
}

class MoreDetail
{
    public int Id { get; set; }
    public string SomeData { get; set; }
}

为了用所有导航属性填充订单对象,我写了

context.Orders.Include("Details").Include("Details.Item")

我也想加载MoreDetail对象,因此我尝试了

context.Orders.Include("Details").Include("Details.Item.Detail")

它不起作用。如何加载完整的Order对象?

1 个答案:

答案 0 :(得分:1)

目前无法实现,但正如您已找到的那样,社区要求User DataVoice提供此功能。 MS Connect还有相关的错误。

您根本无法加载派生类型的导航属性,但可以使用单独的查询加载它们:

var moreDetails = context.MoreDetails;

EF应自动修复您的导航属性。如果您在原始查询中使用过滤订单,则必须在更多详细信息查询中应用该过滤器:

var moreDetails = cotnext.MoreDetials.Where(m => m.Item.Order ....);