获取错误:“指定的包含路径无效。实体类型字段'不声明导航属性”

时间:2013-04-03 05:42:43

标签: asp.net-mvc asp.net-mvc-3 entity-framework entity-framework-4

创建方法:

 public List<Field> GetScheduleDetails()
 {    
     var schedulefields = DBcontextFactory.Context.Set<Field>).Include("ScheduleField").ToList();
 }

使用上述方法,我试图从两个表中获取所有已连接(field.fieldid = schedulefield.fieldid)的记录。字段表与schedulefield表相关。对不起,如果我不熟悉技术术语。

现场模型:

public partial class Field : DOIEntity
{

    public Field()
    {
        this.FilerResponses = new HashSet<FilerResponse>();
        this.ScheduleFields = new HashSet<ScheduleField>();
    }

    public int FieldId { get; set; }
    public string FieldDisplayName { get; set; }
    public int FieldTypeId { get; set; }
    public string HelpText { get; set; }
    public Nullable<bool> OtherTextAllowed { get; set; }
    public Nullable<int> ChoiceGroupId { get; set; }

    public virtual FieldType FieldType { get; set; }
    public virtual ICollection<FilerResponse> FilerResponses { get; set; }
    public virtual ICollection<ScheduleField> ScheduleFields { get; set; }
}

ScheduleField模型:

public partial class ScheduleField
{

    [Key]
    public int ScheduleId { get; set; }
    public int FieldId { get; set; }
    public byte SortOrder { get; set; }
    public Nullable<bool> IsMandatory { get; set; }
    public Nullable<int> ParentFieldId { get; set; }
    public Nullable<int> ParentChoiceId { get; set; }

    public virtual Field Field { get; set; }
    public virtual Schedule Schedule { get; set; }
}

当我调用该方法时,我收到此错误:

  

指定的包含路径无效。 EntityType   'WorldBank.DOI.Data.Field'未声明导航属性   名称'ScheduleField'。

为什么我收到此错误?

1 个答案:

答案 0 :(得分:6)

您必须在Include字符串中使用Field类的属性名称:

public List<Field> GetScheduleDetails()
{    
     var schedulefields = DBcontextFactory.Context.Set<Field>).Include("ScheduleFields").ToList();
}

这将急切加载与Field对象关联的ScheduleField对象。

注意,您也可以急切加载多个级别。例如,如果您想要急切加载ScheduleField对象的日程表,您可以这样做:

public List<Field> GetScheduleDetails()
{    
   var schedulefields = DBcontextFactory.Context.Set<Field>).Include("ScheduleFields.Schedule").ToList();
}