在 EntityFramework 中获取序列的 nextvalue

Get nextvalue of sequence in EntityFramework

提问人:AsM 提问时间:11/15/2023 最后编辑:AsM 更新时间:11/16/2023 访问量:106

问:

我正在尝试获取我的 blazorserver 序列的下一个值。

该序列是很久以前在现有数据库中创建的。

我想通过我新开发的 blazorserver 检索该值。

模型生成器

modelBuilder.HasSequence<long>("sequence_name");

法典

var seq = _db.Database.ExecuteSqlRaw("select nextval('sequence_name')");

结果

seq = -1

获取序列下一个值的正确方法是什么?

C# SQL PostgreSQL 实体框架核心 Blazor

评论

1赞 Rand Random 11/15/2023
github.com/dotnet/efcore/issues/24926
0赞 jmcilhinney 11/15/2023
如果在 SSMS 中执行相同的 SQL,是否获得预期值?我不确定您正在使用的语法,但我使用过并且见过.这些都对你有用吗?SELECT NEXT VALUE FOR sequence_nameSELECT sequence_name.NEXTVAL
0赞 jmcilhinney 11/15/2023
顺便说一句,您可以通过在实体配置中使用类似以下内容来自动插入序列值: .不确定这对你的方案是否有用。modelBuilder.Property(entity => entity.Id).HasDefaultValueSql("NEXT VALUE FOR sequence_name");
3赞 madreflection 11/15/2023
查询标量(非实体)类型
0赞 madreflection 11/15/2023
@jmcilhinney:Postgres 就是这样做的。如果 OP 包含 RDBMS 的标签,那就太好了。nextval

答:

0赞 AsM 11/15/2023 #1

根据 Microsoft 的查询标量(非实体)类型,LINQ 和 SQL 可以一起用于无实体类型。

var seq = _db.Database.SqlQueryRaw<long>("select nextval('sequence_name')");

评论

1赞 madreflection 11/15/2023
在你的问题中,你说你用了,所以我编辑了你的回答用了。确保在代码中执行相同的操作。HasSequence<long>SqlQueryRaw<long>