1

作成されたメソッド:

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

上記の方法で、両方のテーブルからすべての結合された (field.fieldid=schedulefield.fieldid) レコードをフェッチしようとしています。フィールド テーブルは、スケジュールフィールド テーブルと関連付けられています。専門用語に詳しくなくてすみません。

フィールド モデル:

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

スケジュール フィールド モデル:

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' という名前のナビゲーション プロパティを宣言していません。

このエラーが発生するのはなぜですか?

4

1 に答える 1

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();
}
于 2013-04-26T15:27:45.233 に答える