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

Der gängige Fall in Code First-Beispielen besteht darin, einen DbContext mit öffentlichen automatischen DbSet-Eigenschaften für die Entitätstypen Ihres Modells zu verwenden. 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 Mocks 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 die festgelegten Eigenschaften verwendet.

DbContext mit schreibgeschützten Setzeigenschaften

Wenn Sie keine öffentlichen Setter für Ihre DbSet- oder IDbSet-Eigenschaften verfügbar machen möchten, können Sie stattdessen nur lesbare Eigenschaften erstellen und die Instanzen selbst erzeugen. 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 genauso wie für Eigenschaften mit öffentlichen Getters und Settern.