zoukankan      html  css  js  c++  java
  • DbContext-扩展方法-支持存储过程

    一、方法封装

      public static  class DbContextExtension
        {
            public static List<T> GetList<T>(this DbContext db, string sql, CommandType type=CommandType.Text, params DbParameter[] parameters)
            {
                try
                {
                    using (DbConnection conn = db.Database.Connection)
                    {
                        if (conn.State == ConnectionState.Closed)
                        {
                            conn.Open();
                        }
                        using (DbCommand cmd = conn.CreateCommand())
                        {
                            cmd.CommandText = sql;
                            cmd.CommandType = type;
                            cmd.Parameters.AddRange(parameters);
                            DataTable dt = new DataTable();
                            using (DbDataReader reader = cmd.ExecuteReader())
                            {
                                dt.Load(reader);
                            }
                            cmd.Parameters.Clear();
                            string json = dt.ToJson();
                            List<T> list = json.ToObject<List<T>>();
                            return list;
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception(ex.Message);
                }
            }
        }

    二、方法调用

              int code = 0;
                    SqlParameter[] param = { 
                        new SqlParameter("@year",year),
                        new SqlParameter("@userId",userId),
                        new SqlParameter("@code ",code){ Direction=ParameterDirection.Output}
                    };
                    List<EChartsDto<int>> data = new List<EChartsDto<int>>();
    
                    data = db.GetList<EChartsDto<int>>("[dbo].[proc_getRecordsByUser]", CommandType.StoredProcedure, param);

     三、其他版本

     public static class DbContextExtensions
      {
        public static IEnumerable<TElement> ExecuteProc<TElement>(this DbContext db, string sql, params object[] parameters) where TElement : new()
        {
          var connection = db.Database.GetDbConnection();
          using (var cmd = connection.CreateCommand())
          {
            db.Database.OpenConnection();
            cmd.CommandText = sql;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddRange(parameters);
            var dr = cmd.ExecuteReader();
            var columnSchema = dr.GetColumnSchema();
            var data = new List<TElement>();
            while (dr.Read())
            {
              TElement item = new TElement();
              Type type = item.GetType();
              foreach (var kv in columnSchema)
              {
                var propertyInfo = type.GetProperty(kv.ColumnName);
                if (kv.ColumnOrdinal.HasValue && propertyInfo != null)
                {
                  var value = dr.IsDBNull(kv.ColumnOrdinal.Value)
                      ? null
                      : dr.GetValue(kv.ColumnOrdinal.Value);
                  if (value != null
                  && propertyInfo.PropertyType != typeof(int)
                  && propertyInfo.PropertyType != typeof(double))
                  {
                    value = value.ToString();
                  }
                  propertyInfo.SetValue(item, value);
                }
              }
              data.Add(item);
            }
            dr.Dispose();
            return data;
          }
        }
    
    
    
        public static DataTable ExecuteProc(this DbContext db, string sql, params object[] parameters)
        {
          DataTable dt = new DataTable();
          var connection = db.Database.GetDbConnection();
          using (var cmd = connection.CreateCommand())
          {
            db.Database.OpenConnection();
            cmd.CommandText = sql;
            cmd.CommandType = System.Data.CommandType.StoredProcedure;
            cmd.Parameters.AddRange(parameters);
            SqlDataAdapter sda = new SqlDataAdapter((SqlCommand)cmd);
            sda.Fill(dt);
            return dt;
          }
        }
    
    
      }
  • 相关阅读:
    SLS评测报告
    Flash对不同的浏览器的兼容性
    NodeJS的Cluster模块使用
    Varnish+Xcache构建高性能WEB构架初探
    Memcached Client的释疑
    Firebug及YSlow简介与使用图文详解
    PHP Memcached 实现简单数据库缓存
    PHP + Memcache 实现Session共享
    Linux 开机关机在线求助与指令输入
    Linux 基础学习篇笔记 Linux基础知识
  • 原文地址:https://www.cnblogs.com/ABC-wangyuhan/p/14679641.html
Copyright © 2011-2022 走看看