You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Blazor Server中通过Entity Framework获取序列的下一个值?

获取数据库序列下一个值的正确方法

你用ExecuteSqlRaw得到-1是因为这个方法返回的是SQL语句执行后受影响的行数,而非查询结果——SELECT语句不会影响行,所以返回-1是预期行为。以下是两种正确获取序列值的方式:

方法一:直接执行查询并获取结果

使用ExecuteScalar(同步)或ExecuteScalarAsync(异步)来获取单行单列的查询结果,这是专门适配此类场景的方法:

// 同步方式
long seqValue = (long)_db.Database.ExecuteSqlRaw("SELECT nextval('sequence_name')");

// 异步方式(Blazor Server中推荐使用异步避免阻塞)
long seqValue = (long)await _db.Database.ExecuteSqlRawAsync("SELECT nextval('sequence_name')");

如果是SQL Server等其他数据库,需调整SQL语句为对应语法,例如:

SELECT NEXT VALUE FOR sequence_name

方法二:使用EF Core的序列API

既然你已经在模型构建器中配置了序列,可以直接通过EF Core原生API生成序列值,无需手写SQL:

// 找到已配置的序列对象
var sequence = _db.Model.FindSequence("sequence_name");

// 异步获取下一个值
long seqValue = await _db.Database.GenerateSequenceValueAsync(sequence);

// 同步获取下一个值
long seqValue = _db.Database.GenerateSequenceValue(sequence);

内容的提问来源于stack exchange,提问作者AsM

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:54:55