如何从.Net核心应用程序中的SQL语句获取标量值?

.Net核心控制台应用程序(EF核心2.0 / Sql服务器)中的以下代码。

var sql = _context.Set() .FromSql("select dbo.FunctionReturnVarchar({0});", id); 

得到以下exception?

无法为“字符串”创建DbSet,因为此类型未包含在上下文的模型中。

这是一种没有定义具有字符串属性的类的方法吗?

.Set()适用于上下文支持的实体。

您可以尝试一种解决方法

 DbCommand cmd = _context.Database.GetDbConnection().CreateCommand(); cmd.CommandText = "select dbo.FunctionReturnVarchar(@id)"; cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.VarChar) { Value = id }); var value = (string) await cmd.ExecuteScalarAsync(); 

在这种情况下,您需要的是带有绑定输出参数的ExecuteSqlCommand方法:

 var resultParameter = new SqlParameter("@result", SqlDbType.VarChar); resultParameter.Size = 2000; // some meaningfull value resultParameter.Direction = ParameterDirection.Output; _context.Database.ExecuteSqlCommand("set @result = FunctionReturnVarchar({0});", id, resultParameter); var result = resultParameter.Value as string;