ServiceStack返回响应语法错误

时间:2016-12-09 03:17:53

标签: c# servicestack ormlite-servicestack

我只是快速将ServiceStack升级到4.5.4版本,我在尝试转换服务时遇到问题。基本上我不能再将sql响应作为字符串返回。有谁知道这个的正确语法?

我已设法更改为新语法,但是我无法找到更改以下行的正确方法:

  

返回新的PostAccountResponse(){message = string.Format(“{0}”,   message.Value};

public object Post(Account.Model.Account request)
        {
            switch (request.Accounttype)
            {
                case "dview":
                    try
                    {
                        return dbFactory.Exec(dbCmd =>

                        {
                            dbCmd.CommandType = System.Data.CommandType.StoredProcedure;
                            dbCmd.CommandText = "stored procedure...";
                            dbCmd.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("@mobile", request.mobile));
                            MySql.Data.MySqlClient.MySqlParameter message = new MySql.Data.MySqlClient.MySqlParameter("@message", "");
                            message.Direction = System.Data.ParameterDirection.Output;
                            dbCmd.Parameters.Add(message);
                            gender.Direction = System.Data.ParameterDirection.Output;
                            r = dbCmd.ExecuteReader();
                            return new PostAccountResponse() { message = string.Format("{0}", message.Value };
                        });
                    }
                    catch (Exception ex)
                    {
                       //
                    }
                    break;
            }
            return new object();

        }

有谁知道如何正确地返回我服务的响应?非常感谢。我尝试了以下但也没有工作:

    var rdr = dbCmd.ExecuteReader(CommandBehavior.CloseConnection);
                            var results = new List<Account.Model.PostAccountResponse>();
                            while (rdr.Read())
                            {
                                results.Add(new Account.Model.PostAccountResponse { message = string.Format("{0}", message.Value) });
                            }
return new PostAccountResponse { message = results };

更新1

我试图将服务升级到最新版本,并且这个新版本的代码不再编译。这就是我的意思不起作用。编译器会在返回的新PostAccountResponse行上抛出这些错误:

1.-转换为void的匿名函数返回委托不能返回值。

2.-无法将lambda表达式转换为预期的委托类型,因为块中的某些返回类型不能隐式转换为委托返回类型。

3.-无法将类型'Account.Model.PostAccountResponse'隐式转换为'System.Data.IDbCommand'。存在显式转换(您是否错过了演员?)

4.-无法将类型'Account.Model.PostAccountResponse'隐式转换为'System.Threading.Tasks.Task'

1 个答案:

答案 0 :(得分:3)

您应该在using语句中使用数据库连接,而不是使用dbFactory.Exec(),而不是

using (var db = dbFactory.OpenDbConnection())
using (var dbCmd = db.CreateCommand())
{
    dbCmd.CommandType = System.Data.CommandType.StoredProcedure;
    dbCmd.CommandText = "stored procedure...";
    dbCmd.Parameters.Add(new MySql.Data.MySqlClient.MySqlParameter("@mobile", request.mobile));
    MySql.Data.MySqlClient.MySqlParameter message = new MySql.Data.MySqlClient.MySqlParameter("@message", "");
    message.Direction = System.Data.ParameterDirection.Output;
    dbCmd.Parameters.Add(message);
    gender.Direction = System.Data.ParameterDirection.Output;
    r = dbCmd.ExecuteReader();
    return new PostAccountResponse() { message = string.Format("{0}", message.Value };
}

您尝试在此处使用原始ADO.NET连接来调用MySql存储过程,但通常在使用OrmLite APIs访问数据库时,您可以使用base.Db ADO.NET直接连接,例如:

return Db.Select<Table>();