IndizesIndexes

Hinweis

Die Konfiguration in diesem Abschnitt gilt allgemein für relationale Datenbanken.The configuration in this section is applicable to relational databases in general. Die hier gezeigten Erweiterungsmethoden werden verfügbar, wenn Sie einen relationalen Datenbankanbieter installieren (aufgrund des gemeinsam genutzten Pakets Microsoft.EntityFrameworkCore.Relational).The extension methods shown here will become available when you install a relational database provider (due to the shared Microsoft.EntityFrameworkCore.Relational package).

Ein Index in einer relationalen Datenbank ordnet dasselbe Konzept wie ein Index im Kern des Entity Framework.An index in a relational database maps to the same concept as an index in the core of Entity Framework.

KonventionenConventions

Indizes werden gemäß der Konvention benannt IX_<type name>_<property name>.By convention, indexes are named IX_<type name>_<property name>. Bei zusammengesetzten Indizes <property name> wird eine Unterstrich getrennte Liste von Eigenschaftsnamen.For composite indexes <property name> becomes an underscore separated list of property names.

DatenanmerkungenData Annotations

Indizes können nicht mithilfe von Datenanmerkungen konfiguriert werden.Indexes can not be configured using Data Annotations.

Fluent-APIFluent API

So konfigurieren Sie den Namen eines Indexes können Sie die Fluent-API verwenden.You can use the Fluent API to configure the name of an index.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .HasName("Index_Url");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

Sie können auch einen Filter angeben.You can also specify a filter.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .HasFilter("[Url] IS NOT NULL");
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

Fügt mithilfe des SQL Server-Anbieters EF filtern Sie bei einem "IS NOT NULL" für alle Spalten, die Teil eines eindeutigen Indexes sind.When using the SQL Server provider EF adds a 'IS NOT NULL' filter for all nullable columns that are part of a unique index. Diese Konvention überschreiben, Sie angeben können, ein null Wert.To override this convention you can supply a null value.

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .IsUnique()
            .HasFilter(null);
    }
}

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}