• 序列
    • 惯例
    • 数据注解
    • 流式 API

    序列

    注意

    当前章节中涉及的配置一般适用于关系数据库。这里展示的扩展方法在你安装了关系数据库提供程序之后就能获得(由Microsoft.EntityFrmeworkCore.Relational 程序包共享)。

    序列用于在数据库中生成连续的数值。序列与数据表无关联。

    惯例

    按照惯例不会在模型中引入序列。

    数据注解

    不能使用数据注解来配置序列。

    流式 API

    可以使用流式 API 来在模型中创建序列。

    1. class MyContext : DbContext
    2. {
    3. public DbSet<Order> Orders { get; set; }
    4. protected override void OnModelCreating(ModelBuilder modelBuilder)
    5. {
    6. modelBuilder.HasSequence<int>("OrderNumbers");
    7. }
    8. }
    9. public class Order
    10. {
    11. public int OrderId { get; set; }
    12. public int OrderNo { get; set; }
    13. public string Url { get; set; }
    14. }

    还可以配置序列的附加方面,比如其模式,开始值以及增量 等等。

    1. class MyContext : DbContext
    2. {
    3. public DbSet<Order> Orders { get; set; }
    4. protected override void OnModelCreating(ModelBuilder modelBuilder)
    5. {
    6. modelBuilder.HasSequence<int>("OrderNumbers", schema: "shared")
    7. .StartsAt(1000)
    8. .IncrementsBy(5);
    9. }
    10. }

    引入序列之后,就可以使用它来为你模型中的属性生成值。例如,可以使用 默认值 来在数据库中插入序列的下一个值。

    1. class MyContext : DbContext
    2. {
    3. public DbSet<Order> Orders { get; set; }
    4. protected override void OnModelCreating(ModelBuilder modelBuilder)
    5. {
    6. modelBuilder.HasSequence<int>("OrderNumbers", schema: "shared")
    7. .StartsAt(1000)
    8. .IncrementsBy(5);
    9. modelBuilder.Entity<Order>()
    10. .Property(o => o.OrderNo)
    11. .HasDefaultValueSql("NEXT VALUE FOR shared.OrderNumbers");
    12. }
    13. }
    14. public class Order
    15. {
    16. public int OrderId { get; set; }
    17. public int OrderNo { get; set; }
    18. public string Url { get; set; }
    19. }