Definieren von DbSets

Beim Entwickeln mit dem Code First-Workflow definieren Sie einen abgeleiteten DbContext, der Ihre Sitzung mit der Datenbank darstellt und ein DbSet für jeden Typ in Ihrem Modell verfügbar macht. In diesem Thema werden die verschiedenen Möglichkeiten zum Definieren der DbSet-Eigenschaften behandelt.

DbContext mit DbSet-Eigenschaften

Im gängigen Fall in Code First-Beispielen wird ein DbContext mit öffentlichen, automatischen DbSet-Eigenschaften für die Entitätstypen Ihres Modells verwendet. Beispiel:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }
}

Wenn sie im Code First-Modus verwendet wird, werden Blogs und Beiträge als Entitätstypen konfiguriert sowie andere Typen konfiguriert, die von diesen erreichbar sind. Darüber hinaus ruft DbContext automatisch den Setter für jede dieser Eigenschaften auf, um eine Instanz des entsprechenden DbSet festzulegen.

DbContext mit IDbSet-Eigenschaften

Es gibt Situationen, z. B. beim Erstellen von Mock-Objekten oder Fälschungen, wo es nützlicher ist, die festgelegten Eigenschaften mithilfe einer Schnittstelle zu deklarieren. In solchen Fällen kann die IDbSet-Schnittstelle anstelle von DbSet verwendet werden. Beispiel:

public class BloggingContext : DbContext
{
    public IDbSet<Blog> Blogs { get; set; }
    public IDbSet<Post> Posts { get; set; }
}

Dieser Kontext funktioniert genau auf die gleiche Weise wie der Kontext, der die DbSet-Klasse für seine festgelegten Eigenschaften verwendet.

DbContext mit schreibgeschützten Eigenschaften

Wenn Sie keine öffentlichen Setter für Ihre DbSet- oder IDbSet-Eigenschaften verfügbar machen möchten, können Sie stattdessen schreibgeschützte Eigenschaften erstellen und die festgelegten Instanzen selbst erstellen. Beispiel:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs
    {
        get { return Set<Blog>(); }
    }

    public DbSet<Post> Posts
    {
        get { return Set<Post>(); }
    }
}

Beachten Sie, dass DbContext die Instanz von DbSet zwischenspeichert, die von der Set-Methode zurückgegeben wird, sodass jede dieser Eigenschaften bei jedem Aufruf dieselbe Instanz zurückgibt.

Die Ermittlung von Entitätstypen für Code First funktioniert hier auf die gleiche Weise wie für Eigenschaften mit öffentlichen Gettern und Settern.