web-dev-qa-db-ja.com

EF Core DBsetの.Include()メソッド

私は現在、.Include()を呼び出すことができず、インテリセンス(vscode内)が存在するとは思わないようです。

今、長い間ウェブを検索した後、私はこれを見つけました:

汎用リポジトリを実装しているEFで.Include()メソッドが見つかりません

これは、.IncludeがEF 5および6でのみ利用可能なSystem.Data.Entitiesにのみ存在することを示唆しているようです。

では、EFコアのエンティティのリストプロパティをどのように積極的に読み込むのですか?

私の文脈をここに

public class Database : DbContext
{
    //Set new datasources like this: public DbSet<class> name { get; set; }

    public DbSet<Domain.Resource> Resources { get; set; }
    public DbSet<Domain.ResourceType> ResourceTypes { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Filename=./something.db");
    }
}

データクラスは次のとおりです。

public class Resource
{
    public int ResourceId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }

    public int ResourceTypeId { get; set; }
    public ResourceType ResourceType { get; set; }
}
public class ResourceType
{
    public int ResourceTypeId { get; set; }
    public string Name { get; set; }

    public List<Resource> Resources { get; set; }
}

次に、私は次のようなことをします:

public List<ResourceType> GetAll()
{
    var router = new Database();

    var result = router.ResourceTypes.Include(rt => rt.Resources); //It's here there's absolutely no .Include method

    return result.ToList();
}

.IncludeはEF Coreに存在しませんか?

16
user3801839

これは、メソッドを呼び出しているファイル内の参照が欠落していることの直接的な結果です(ただし、どのように理解しているかはよくわかりません...)

とにかく、追加:

using Microsoft.EntityFrameworkCore;

TsengSmit などが推奨されていて、トリックをしました。 (関数を定義するファイル内)

なぜそれが機能するのか分かりません。 .includeはDbSetを介して自動的に利用可能になると考えました。

でもありがとう! :)

35
user3801839

EF 6以下のユーザーがここにたどり着き、OPが実際にこのように言及していることに気付かない場合は、

using System.Data.Entity;

あなたのクラスに。

4
Mike Devenney

ここ は、EF7でこの問題を追跡している以前の回答です。現在「含まれている」ようです。

1
trevorc