user2181707
user2181707

Reputation: 191

Getting Error: "A specified Include path is not valid. The EntityType Field' does not declare a navigation property"

Created method:

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

With the above method i am trying to fetch all joined(field.fieldid=schedulefield.fieldid) records from both tables. The field table is related with schedulefield table. Sorry if i am not familiar with technical terms.

Field Model:

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 Model:

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; }
}

When I call the method I am getting this error:

A specified Include path is not valid. The EntityType 'WorldBank.DOI.Data.Field' does not declare a navigation property with the name 'ScheduleField'.

Why am I getting this error?

Upvotes: 1

Views: 8949

Answers (1)

Steven Magana-Zook
Steven Magana-Zook

Reputation: 2759

You have to use the property name of the Field class in the Include string:

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

This will eager load the ScheduleField objects associated with the Field objects.

Note, you can also eager load many levels. For example, if you want to eager load the schedules of the ScheduleField object as well you would do this:

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

Upvotes: 6

Related Questions