使用Oracle Provider+EF Core7在LinqPad获取序列值遇ExecuteQuery缺失问题
LinqPad中EF Core获取Oracle序列下一个值的解决办法
你之前用的ExecuteQuery是LinqPad针对LINQ to SQL的方法,EF Core不支持,给你三种可行方案:
方案一:用EF Core的标量查询方法
通过DbContext的Database对象直接执行SQL获取序列值,代码如下:var newID = this.Database.SqlQuery<decimal>("SELECT SEQ_PERSON_ID.NEXTVAL FROM DUAL").First();方案二:通过实体集映射查询
借助实体的属性映射来提取序列值,前提是实体的ID属性类型和序列返回值匹配:var newID = this.Set<Person>().FromSqlRaw("SELECT SEQ_PERSON_ID.NEXTVAL AS Id FROM DUAL").Select(p => p.Id).First();方案三:临时切换到SQL模式执行
如果只是临时获取序列值,直接把LinqPad的查询模式改成SQL,执行这条语句即可:SELECT SEQ_PERSON_ID.NEXTVAL FROM DUAL
内容的提问来源于stack exchange,提问作者Nime Cloud
相关产品推荐
相关产品推荐

