序列將在資料庫中生成唯一的順序數值, 序列不與特定表相關聯,并且可以將多個表設定為從同一序列中繪制值,
目標是一個可自定起始值的自增序列,在EF6中本來希望使用注解的方式,但沒找到方法,只能使用Fluent API,
https://docs.microsoft.com/zh-cn/ef/core/modeling/sequences
官方檔案的例子是:
modelBuilder.HasSequence<int>("OrderNumbers", schema: "shared")
.StartsAt(1000)
modelBuilder.Entity<Order>()
.Property(o => o.OrderNo)
.HasDefaultValueSql("NEXT VALUE FOR shared.OrderNumbers");
開始沒注意這是SQL Server的方言,使用出了問題,在postgresql中使用需要注意兩點:
比較明顯的是獲取序列的下個值的語法,NEXT VALUE FOR shared.OrderNumbers >> nextval('\"OrderNumbers\"'),其次就是序列名字需使用雙括號""包裹,
https://www.npgsql.org/efcore/modeling/generated-properties.html#standard-sequence-driven-columns
在npgsql的檔案中也是這么做的,原因是ef/npgsql將這一句
modelBuilder.HasSequence<int>("OrderNumbers", schema: "shared") .StartsAt(1000);
翻譯為
CREATE SEQUENCE shared."OrderNumbers" START WITH 100000000 INCREMENT BY 1 NO MINVALUE NO MAXVALUE NO CYCLE;
而shared."OrderNumbers"和shared.OrderNumbers不被認為是同一個序列,所以完整的例子為:
modelBuilder.HasSequence<int>("OrderNumbers")
.StartsAt(1000)
modelBuilder.Entity<Order>()
.Property(o => o.OrderNo)
.HasDefaultValueSql("nextval('\"OrderNumbers\"')");
站外博客地址:https://blog.yuhang.ch
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/373630.html
標籤:ASP.NET
上一篇:File.writeAsBytes的“flush”引數在Dart.io中有什么作用?
下一篇:二進制與二進制運算
