序列

注意

当前章节中涉及的配置一般适用于关系数据库。这里展示的扩展方法在你安装了关系数据库提供程序之后就能获得(由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. }