EFにIncludeメソッドのカスタム関数

asp.net-core c# entity-framework entity-framework-core repository-pattern

質問

私はEF Core 1でASP.NET Core 1アプリケーションを作成します。私は、1対多の関係を持つ2つのクラスを持っています

 public class Country: EntityBase
 {
    public string Name { get; set; }

    // fields for relations

    public IQueryable<Singer> Singers { get; set; }
 }

 public class Singer : EntityBase
 {
    public string Name { get; set; }

    // fields for relation

    public int CountryId { get; set; }
    public virtual Country Country { get; set; }
 }

そしてそれらのマッピング

 public class SingerMap
 {
    public SingerMap(EntityTypeBuilder<Singer> entityBuilder)
    {
        entityBuilder.HasKey(x => x.Id);
        entityBuilder.Property(x => x.Id).ValueGeneratedOnAdd();

        entityBuilder.Property(x => x.Name).HasMaxLength(500);

        //relational fields
        entityBuilder.HasOne(x => x.Country).WithMany(x => x.Singers).HasForeignKey(x => x.CountryId);
    }
 }

 public class CountryMap
 {
    public CountryMap(EntityTypeBuilder<Country> entityBuilder)
    {
        entityBuilder.HasKey(x => x.Id);
        entityBuilder.Property(x => x.Id).ValueGeneratedOnAdd();
        entityBuilder.Property(x => x.Name).HasMaxLength(500);
    }
 }

私はこのエンティティの汎用リポジトリパターンを作成します。以下のようにインクルードプロパティのための関数があります

  public virtual IEnumerable<T> AllIncluding(params Expression<Func<T, object>>[] includeProperties)
    {
        IQueryable<T> query = _context.Set<T>();
        foreach (var includeProperty in includeProperties)
        {
            query = query.Include(includeProperty);
        }
        return query.AsEnumerable();
    }

私はこのメソッドを呼び出します

    [HttpGet]
    public JsonResult GetAllForIndex()
    {
        var result = Service.AllIncluding(x => x.Country);
        return Json(result);
    }

この後、私はこのエラーを受け取ります

エンティティタイプ 'Country'のナビゲーションプロパティ 'Singers'のタイプは、具体的なインスタンスを作成できない 'IQueryable'です。使用する前にプロパティを初期化するか、パブリックなパラメータのないコンストラクタを型に追加するか、HashSet <>またはList <>に割り当てることができる型を使用します。

私は解決策を考えていません。助けてください。

受け入れられた回答

public IQueryable<Singer> Singers { get; set; }

すべきである

public List<Singer> Singers { get; set; }

例外メッセージには、何が間違っていて、どのようなものに変更すべきかが書かれています。 HashSet<>またはList<>から派生するほぼすべての型を使用できます。



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ