zoukankan      html  css  js  c++  java
  • 项目中的.NET Web API知识总结

             最近在做公司的项目,自己负责webapi的框架的搭建与开发,最近很忙,一直没时间对工作中遇到的知识点缺少个总结,现总结一下,对自己是个提升,如果个人的小点点小总结能对博友有帮助那也是善莫大焉.

    (1)、 首先说一下c# dynamic,dynamic是FrameWork4.0的新特性.我在api中用了比较多的dynamic,首先个人认为dynamic能使代码变得优雅,可以省去定义多余的实体,dynamic是运行时决定类型有哪些属性,包括赋值和取值都可以随便指定属性,

    例如:

    dynamic sourceInfo = SqlDataHelper.GetWebDMDynamicData(sourceIdSql, new {id=3).FirstOrDefault();
                        if (null != sourceInfo)
                        {
                            item.SourceId = sourceInfo.SourceId;
                            item.DocType = sourceInfo.DocType;
                            item.InvestmentType = sourceInfo.InvestmentType;
                        }

    以上代码中sourceInfo指定了dynamic,开发人员知道如果取值成功肯定会有SourceId属性,所以item.SourceId = sourceInfo.SourceId;赋值就不奇怪了.

    同样如下代码也可以自己为dynamic随便指定属性:

    1 dynamic data= null;
    2 data= SqlDataHelper.GetWebDMDynamicData(sql, new { Id = id }).ToList().FirstOrDefault();
    3 data.a= 124;
    4 data.b= "test2";
    5 data.c="test3";

    可以为dynamic类型data随便指定属性,前提条件是在第(2)步骤时data的值不能为空,否则在第(3)步data是null,这时候就会出现空异常.

    (2)、再谈论一下轻量级的ORM框架,这个框架网上已经充斥了大量的学习资料,本人只是对项目中的使用心得做些概括,不对之处欢迎指正.

            我们知道调用数据库存储过程肯定有参数化,dapper提供了一个比较好的参数化对象DynamicParameters,上代码:

    DynamicParameters dynamicParameters = new DynamicParameters();
                dynamicParameters.Add("@p_Id1", id1, DbType.String);
                dynamicParameters.Add("@p_Id2", id2, DbType.Int32);
                dynamicParameters.Add("@p_dateTime", dateTime, DbType.DateTime);
                List<dynamic> info =  conn.Query<T>(storeProcedureName,dynamicParameters, null, true, null, CommandType.StoredProcedure) as List<T>;

            如果要指定执行存储过程,那么要指定CommandType.StoredProcedure关键字.

     (3)、以下是List<T>转dataTable的方法,的确为类型转换省去了好多的代码,但是也有一个自己花了点时间没有解决的问题,就是T必须指定实体类型,而不能使用dynamic,否则type.GetProperties

    取不到正确的属性,这样系统就必须多定义一个实体类传进来.

     public static DataTable ToDataTable<T>(IList<T> list)
            {
                //create propertyInfo
                List<PropertyInfo> pList = new List<PropertyInfo>();
                //get reflector interface
                Type type = typeof(T);
                DataTable dt = new DataTable();
                //add datatable column
                Array.ForEach<PropertyInfo>(type.GetProperties(), p => { pList.Add(p); dt.Columns.Add(p.Name, Nullable.GetUnderlyingType(
                p.PropertyType) ?? p.PropertyType); });
                foreach (var item in list)
                {
                    //create new row
                    DataRow row = dt.NewRow();
                    pList.ForEach(p => row[p.Name] = p.GetValue(item, null)??System.DBNull.Value);
                    dt.Rows.Add(row);
                }
                return dt;
            }

    好了,以上就是项目中的一些小小的总结,还有一些零碎的知识点不做过多描述了.通过项目过程中还有好多要学习的能力,特别是沟通能力,技术引导业务能力.

  • 相关阅读:
    Linux 下用route命令修改默认网关,不用重启网络
    MySQL数据库改名的三种方法
    解决 “Configuration file '/etc/keepalived/keepalived.conf' is not a regular non-executable file”报错
    【WebApi】初探.NET CORE WEB API(RESTful风格)
    【日常排雷】ConnectionString连接字符串-密码丢失的解决方法
    【WebApi】(四)Asp.net web api中的坑-【api的返回值】
    【WebApi】(三)Asp.net web api中的坑-【http post请求中的参数】
    【WebApi】(二)Asp.net web api中的坑-【http get请求中的参数】
    python | 数据分析(四)- Sklearn数据包
    python | 数据分析(三)- Matplotlib数据包
  • 原文地址:https://www.cnblogs.com/cby-love/p/5989764.html
Copyright © 2011-2022 走看看