ラムダを受け取る DbQuery.Include() のオーバーロードはどこに行ったのでしょうか? 質問する

ラムダを受け取る DbQuery.Include() のオーバーロードはどこに行ったのでしょうか? 質問する

EntityFramework を使用する新しいプロジェクト用に、コードファースト モデルをいくつか宣言しました。

public class BlogEntry
{
    public long Id { get; set; }
    public long AuthorId { get; set; }
    public DateTime PublishedStamp { get; set; }
    public string Title { get; set; }
    public string Text { get; set; }

    public virtual User Author { get; set; }
}

public class User
{
    public long Id { get; set; }
    public string Email { get; set; }
    // ...
}

class BlogDb : DbContext
{
    public DbSet<BlogEntry> Entries { get; set; }
    public DbSet<User> Users { get; set; }
}

ここで、最新のブログエントリ 10 件を取得したいとします。

var entries = new BlogDb().Entries.OrderByDescending(...).Take(10).ToList();

ここで問題となるのは、アクセスするとentry.Author別のデータベース クエリが発生することです。ブログ エントリごとにこのようなクエリを別々に実行することは望ましくありません。 の目的はIncludeまさにこのケースであると理解していますので、次のように言えます。

var entries = new BlogDb().Entries.Include(e => e.Author).(...).ToList();

しかし、その方法は存在しないようです。Include(string)次のような のみがあります。

var entries = new BlogDb().Entries.Include("Author").(...).ToList();

しかし、これはコンパイル時にチェックされず、名前変更リファクタリングで見逃されるため面倒です。確かに、ラムダを使用したバージョンは「正しい」アプローチです。

そのメソッドはどこに行ったのでしょうか? EntityFramework にはもう含まれていないのでしょうか?

(これを実現するために自分で拡張メソッドを作成できることはわかっているので、作成する必要はありません。私が何か見落としているかどうかを知りたいだけです。)

ベストアンサー1

using System.Data.Entity;

これは EF v4.1 以降ですが、拡張メソッドであるため参照が必要です。


編集 (@EastonJamesHarvey に感謝)

使用する場合EFコアインポートは次のようになります:

using Microsoft.EntityFrameworkCore;

おすすめ記事