IndizesIndexes

Indizes sind ein gängiges Konzept für viele Datenspeicher.Indexes are a common concept across many data stores. Obwohl deren Implementierung im Datenspeicher variieren kann, müssen sie dienen zum Suchen auf Grundlage einer Spalte (oder eine Gruppe von Spalten) stärker effizient.While their implementation in the data store may vary, they are used to make lookups based on a column (or set of columns) more efficient.

KonventionenConventions

Gemäß der Konvention ist ein Index erstellt, in jeder Eigenschaft (oder einen Satz von Eigenschaften) an, die als Fremdschlüssel verwendet werden.By convention, an index is created in each property (or set of properties) that are used as a foreign key.

DatenanmerkungenData Annotations

Indizes können nicht mithilfe von datenanmerkungen erstellt werden.Indexes can not be created using data annotations.

Fluent-APIFluent API

Sie können die Fluent-API verwenden, um einen Index für eine einzelne Eigenschaft angeben.You can use the Fluent API to specify an index on a single property. Standardmäßig sind die Indizes nicht eindeutig.By default, indexes are non-unique.

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

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

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

Sie können auch angeben, dass ein Index muss eindeutig sein, was bedeutet, dass keine zwei Entitäten, die gleichen Werte für die angegebenen Eigenschaften verfügen können.You can also specify that an index should be unique, meaning that no two entities can have the same value(s) for the given property(s).

        modelBuilder.Entity<Blog>()
            .HasIndex(b => b.Url)
            .IsUnique();

Sie können auch einen Index über mehr als eine Spalte angeben.You can also specify an index over more than one column.

class MyContext : DbContext
{
    public DbSet<Person> People { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Person>()
            .HasIndex(p => new { p.FirstName, p.LastName });
    }
}

public class Person
{
    public int PersonId { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

Tipp

Es gibt nur einen Index pro Satz von Eigenschaften.There is only one index per distinct set of properties. Wenn Sie die Fluent-API verwenden, so konfigurieren Sie einen Index für eine Gruppe von Eigenschaften, die bereits einen Index definiert wird, entweder durch Konventionen oder vorherigen Konfiguration werden dann Sie die Definition des Index ändern.If you use the Fluent API to configure an index on a set of properties that already has an index defined, either by convention or previous configuration, then you will be changing the definition of that index. Dies ist nützlich, wenn Sie möchten, um einen Index zu konfigurieren, der gemäß der Konvention erstellt wurde.This is useful if you want to further configure an index that was created by convention.