シーケンスSequences

注意

このセクションの構成は、リレーショナル データベース全般に適用されます。The configuration in this section is applicable to relational databases in general. ここに示す拡張方法は、リレーショナル データベース プロバイダーをインストールすると (共有 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).

シーケンスは、データベースの連続した数値の値を生成します。A sequence generates a sequential numeric values in the database. シーケンスでは、特定のテーブルに関連付けられていません。Sequences are not associated with a specific table.

規約Conventions

慣例により、シーケンスが導入されましたでモデルにします。By convention, sequences are not introduced in to the model.

データの注釈Data Annotations

データ注釈を使用して、シーケンスを構成することがありません。You can not configure a sequence using Data Annotations.

Fluent APIFluent API

Fluent API を使用して、モデルのシーケンスを作成することができます。You can use the Fluent API to create a sequence in the model.

class MyContext : DbContext
{
    public DbSet<Order> Orders { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasSequence<int>("OrderNumbers");
    }
}

public class Order
{
    public int OrderId { get; set; }
    public int OrderNo { get; set; }
    public string Url { get; set; }
}

そのスキーマ、開始値、および増分値などのシーケンスの他の側面を構成することもできます。You can also configure additional aspect of the sequence, such as its schema, start value, and increment.

class MyContext : DbContext
{
    public DbSet<Order> Orders { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasSequence<int>("OrderNumbers", schema: "shared")
            .StartsAt(1000)
            .IncrementsBy(5);
    }
}

シーケンスが導入された後は、プロパティの値をモデルの生成に使用できます。Once a sequence is introduced, you can use it to generate values for properties in your model. たとえば、使用することができます既定値のシーケンスから次の値を挿入します。For example, you can use Default Values to insert the next value from the sequence.

class MyContext : DbContext
{
    public DbSet<Order> Orders { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.HasSequence<int>("OrderNumbers", schema: "shared")
            .StartsAt(1000)
            .IncrementsBy(5);

        modelBuilder.Entity<Order>()
            .Property(o => o.OrderNo)
            .HasDefaultValueSql("NEXT VALUE FOR shared.OrderNumbers");
    }
}

public class Order
{
    public int OrderId { get; set; }
    public int OrderNo { get; set; }
    public string Url { get; set; }
}