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

时间:2017-09-11 19:41:01

标签: c# entity-framework .net-core entity-framework-core .net-standard-2.0

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

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

得到以下异常?

  

无法为'string'创建DbSet,因为此类型未包含在上下文的模型中。

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

2 个答案:

答案 0 :(得分:10)

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

您可以尝试解决方法

DbConnection = connection = _context.Database.GetDbConnection();

using(DbCommand cmd = connection.CreateCommand()) {

    cmd.CommandText = "select dbo.FunctionReturnVarchar(@id)";    

    cmd.Parameters.Add(new SqlParameter("@id", SqlDbType.VarChar) { Value = id });

    if (connection.State.Equals(ConnectionState.Closed)) { connection.Open(); }

    var value = (string) await cmd.ExecuteScalarAsync();
}

if (connection.State.Equals(ConnectionState.Open)) { connection.Close(); }

答案 1 :(得分:10)

在这种情况下,您需要的是带有绑定输出参数的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;