首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用servicestack ormlite将存储过程运行到自己的模型中

使用servicestack ormlite将存储过程运行到自己的模型中
EN

Stack Overflow用户
提问于 2012-07-19 21:38:53
回答 4查看 7.2K关注 0票数 7

有没有使用ormlite在serviceStack MVC上运行存储过程的例子?迷思?看过下面这段代码:

代码语言:javascript
复制
var results = new List<EnergyCompare>
                    {dbFactory.Exec(dbCmd =>
                       {
                          dbCmd.CommandType = CommandType.StoredProcedure;
                          dbCmd.Parameters.Add(new SqlParameter("@id", 1));
                          dbCmd.CommandText = "GetAuthorById";
                          return dbCmd.ExecuteReader().ConvertTo<EnergyCompare>();
                       }
                    )};

但带有从未在谷歌群组中工作过的文字!

我也可以这样写:

代码语言:javascript
复制
using(var db = new SwitchWizardDb())
            {
             var results2 = db.dbCmd.ExecuteProcedure()   
            }

但不确定如何使用参数完成此操作,并且在我查看的源代码中,它说过时了?

谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-07-20 15:49:11

好吧,我想最好是使用我自己的处理程序,所以我已经创建了这个,任何想法都将是最受欢迎的,特别是我如何在某种函数或其他东西中传递params:

我有一个主类来处理对我的connection对象的轻松访问:

代码语言:javascript
复制
public class DatabaseNameSp : IDisposable
{
    private readonly SqlConnection _spConn = new SqlConnection(DatabaseNameSp .dbConString);
    public readonly SqlCommand SpCmd;

    public DatabaseNameSp (string procedureName)
    {
       _spConn.Open();

        SpCmd = new SqlCommand
                    {
                        Connection = _spConn,
                        CommandType = CommandType.StoredProcedure,
                        CommandText = procedureName
                    };
    }

    public void Dispose()
    {
         _spConn.Close();
         SpCmd.Dispose();
    }
}

用法:

代码语言:javascript
复制
using (var db = new DatabaseNameSp ("procedurenname"))
            {
                db.SpCmd.Parameters.Add(new SqlParameter("@Id", 1));

                var rdr = db.SpCmd.ExecuteReader(CommandBehavior.CloseConnection);

                var results = new List<CustomDTO>();
                while (rdr.Read())
                {
                    results.Add(new CustomDTO { Name = rdr["name"].ToString(), Id = rdr["id"].ToString() });
                }
                return new CustomDTOResponse { Results = results };
            }

任何想法!

谢谢

票数 3
EN

Stack Overflow用户

发布于 2013-02-28 07:56:52

看起来ServiceStack.ORMLite已经更新了,让这一切变得更容易:

代码语言:javascript
复制
List<Poco> results = db.SqlList<Poco>("EXEC GetAnalyticsForWeek 1");
List<Poco> results = db.SqlList<Poco>("EXEC GetAnalyticsForWeek @weekNo", new { weekNo = 1 });

List<int> results = db.SqlList<int>("EXEC GetTotalsForWeek 1");
List<int> results = db.SqlList<int>("EXEC GetTotalsForWeek @weekNo", new { weekNo = 1 });

此示例位于front page of the github repo上。

票数 23
EN

Stack Overflow用户

发布于 2012-07-30 02:14:37

下面是一个使用ormLite运行存储过程的示例,可能会对您有所帮助:

代码语言:javascript
复制
IList<MyDTO> myList = DbFactory.Run(dbCnx =>
{
 using (var dbCmd = dbCnx.CreateCommand())
 {
      dbCmd.CommandType = CommandType.StoredProcedure;
      dbCmd.CommandText = "mySchema.myStoredProc";
      dbCmd.Parameters.Add(new SqlParameter("@param1", val1));
      dbCmd.Parameters.Add(new SqlParameter("@param2", val2));

      var r = dbCmd.ExecuteReader();
      return r.ConvertToList<MyDTO>();
  }
 });
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11562131

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档