ausdrücke - c# tag



Wo ist die Überladung von DbQuery.Include() los, die ein Lambda braucht? (1)

using System.Data.Entity;//ftw

Es ist in EF v4.1 und höher, aber Sie benötigen eine Referenz, da es eine Erweiterungsmethode ist.

Bearbeiten (Danke an @EastonJamesHarvey)

Wenn EF Core verwendet wird, sollte der Import wie folgt sein:

using Microsoft.EntityFrameworkCore;

https://src-bin.com

Ich habe gerade einige Code-First-Modelle für ein neues Projekt mit EntityFramework deklariert.

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

Angenommen, ich möchte die 10 letzten Blogeinträge abrufen:

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

Das Problem besteht nun darin, dass der Zugriff auf entry.Author eine weitere Datenbankabfrage verursacht. Sie möchten keine separate Abfrage für jeden Blogeintrag. Nun verstehe ich, dass der Zweck von Include genau dieser Fall ist, also kann ich sagen:

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

Diese Methode scheint jedoch nicht zu existieren. Es gibt nur ein Include(string) , so:

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

aber das ist ärgerlich, weil es nicht kompiliert ist und durch das Umbenennen refactoring übersehen wird. Sicherlich ist die Version mit dem Lambda der "richtige" Ansatz.

Wohin ging diese Methode? Ist es nicht mehr in EntityFramework enthalten?

(Ich weiß, dass ich eine Erweiterungsmethode für mich selbst schreiben kann, um das zu erreichen, also müssen Sie nicht. Ich möchte nur wissen, ob ich etwas vermisse.)





entity-framework