IndizesIndexes

Indizes sind ein Konzept gemein über viele Datenspeichern.Indexes are a common concept across many data stores. Während ihre Implementierung in den Datenspeicher variieren kann, werden sie verwendet, um Suchvorgänge basierend auf einer Spalte (oder eine Gruppe von Spalten) machen 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

Die Fluent-API können Sie einen Index für eine einzelne Eigenschaft angeben.You can use the Fluent API to specify an index on a single property. Standardmäßig werden 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 eindeutig ist, was bedeutet, dass keine zwei Entitäten die gleichen Werte für den angegebenen Eigenschaft(en) enthalten kann.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 ist nur eine 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, indem entweder Konvention oder vorherige Konfiguration werden dann Sie die Definition dieses Indexes ä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.