• .netFramework 升级NetCore 问题汇总及解决方案


    升级版本:

    NetCore sdk 2.2.108 、AspNetCore 2.2.0、EFCore 2.2.6

    所有程序引用均从NuGet上下载,并支持NetCore 


    问题: 

    问题1:No coercion operator is defined between types 'System.Int16' and 'System.Boolean'(mysql 数据库类型转化中int16 byte bool 转化问题)

    解决方案:

    引用 Pomelo.EntityFreamworkCore.Mysql 2.2.0 代替 MySql.Data.EntityFrameworkCore 

    问题2:Error generated for warning 'Microsoft.EntityFrameworkCore.Database.Transaction.AmbientTransactionWarning: An ambient transaction has been detected. The current provider does not support ambient transactions.(环境事务、分布式事务问题)

    解决方案:

    因为Pomelo.EFCore.Mysql 2.2.0 不支持TransactionScope 

    所以 采用 using (var scope = DataContextFactory.GetDataContext().Database.BeginTransaction(System.Data.IsolationLevel.RepeatableRead)) 或者 

    using (var scope = new CommittableTransaction()) 这两种事务代替

    问题3:HttpResponseMessage 问题

    解决方案:

    两个解决方案,建议第一个

    1:改为File()返回   2:添加引用 并在startup里注册 services.AddMvc().AddWebApiConventions();

    问题4:依赖问题

    解决方案:采用Autofac4.9.3 版本支持NetCore 

    问题5:模型转换 Model  不支持static 

    解决方案:将之前的代码改为第二个里面的 ,并在调用的地方统一 实例化

            public center_flow CenterFlowDto_to_CenterFlow(CenterFlowDto dto)
            {
                var mapper = CreateMap<CenterFlowDto, center_flow>();
    
                return mapper.Map<CenterFlowDto, center_flow>(dto);
            }
    /// <summary>
            /// 险别列表
            /// </summary>
            /// <param name="list"></param>
            /// <returns></returns>
            public List<compensate_insurance> CompensateInsuranceDtoList_to_EntityList(List<CompensateInsuranceDto> list)
            {
                //var mapper = CreateMap<CompensateAdjustmentDto, compensate_adjustment>();
                //return mapper.Map<List<CompensateInsuranceDto>, List<compensate_insurance>>(list);
    
                var config = new MapperConfiguration(cfg => { cfg.CreateMap<List<CompensateInsuranceDto>, List<compensate_insurance>>(); });
                var mapper = config.CreateMapper();
    
                return mapper.Map<List<CompensateInsuranceDto>, List<compensate_insurance>>(list);
            }

     


    帮助类:SqlQuery<T>

      1 public static class DataContextExtend
      2     {
      3         public static List<T> SqlQuery<T>(this DatabaseFacade facade, string sql, params object[] parameters)
      4         {
      5             using (var conn = new MySqlConnection(facade.GetDbConnection().ConnectionString))
      6             {
      7                 conn.Open();
      8                 var ds = new DataSet();
      9                 using (var da = new MySqlDataAdapter(sql, conn.ConnectionString))
     10                 {
     11                     if (parameters.Any())
     12                     {
     13                         da.SelectCommand.Parameters.AddRange(parameters);
     14                     }
     15                     da.Fill(ds);
     16                 }
     17 
     18                 conn.Close();
     19                 if (ds.Tables.Count > 0)
     20                 {
     21                     return ToDataList<T>(ds.Tables[0]);
     22                 }
     23                 else
     24                 {
     25                     return new List<T>();
     26                 }
     27             }
     28         }
     29         /// <summary>
     30         /// 返回首行首列
     31         /// </summary>
     32         /// <typeparam name="T"></typeparam>
     33         /// <param name="facade"></param>
     34         /// <param name="sql"></param>
     35         /// <param name="parameters"></param>
     36         /// <returns></returns>
     37         public static T SqlCount<T>(this DatabaseFacade facade, string sql, params object[] parameters)
     38         {
     39             using (var conn = new MySqlConnection(facade.GetDbConnection().ConnectionString))
     40             {
     41                 conn.Open();
     42                 T result;
     43                 var ds = new DataSet();
     44 
     45                 using (var commend = new MySqlCommand(sql, conn))
     46                 {
     47                     if (parameters.Any())
     48                         commend.Parameters.AddRange(parameters);
     49                     result = (T)commend.ExecuteScalar();
     50                 }
     51 
     52                 conn.Close();
     53 
     54                 return result;
     55 
     56             }
     57 
     58         }
     59 
     60 
     61         /// <summary>
     62         /// DataTable转成List
     63         /// </summary>
     64         /// <typeparam name="T"></typeparam>
     65         /// <param name="dt"></param>
     66         /// <returns></returns>
     67         public static List<T> ToDataList<T>(this DataTable dt)
     68         {
     69             var list = new List<T>();
     70             var plist = new List<PropertyInfo>(typeof(T).GetProperties());
     71             if (typeof(T) == typeof(string))
     72             {
     73                 foreach (DataRow givenObject in dt.Rows)
     74                 {
     75                     for (int i = 0; i < dt.Columns.Count; i++)
     76                     {
     77                         if (givenObject[i] != DBNull.Value && givenObject[i] != null)
     78                         {
     79                             var instance = givenObject[i].ToString();  // Your custom conversion to string.
     80                             list.Add((T)(object)instance);
     81                         }
     82                         else
     83                         {
     84                             list.Add((T)(object)null);
     85                         }
     86                     }
     87                 }
     88             }
     89             else if (typeof(T).IsClass)
     90             {
     91                 foreach (DataRow item in dt.Rows)
     92                 {
     93                     T s = Activator.CreateInstance<T>();
     94                     for (int i = 0; i < dt.Columns.Count; i++)
     95                     {
     96                         PropertyInfo info = plist.Find(p => p.Name.ToUpper() == dt.Columns[i].ColumnName.ToUpper());
     97                         if (info != null)
     98                         {
     99                             try
    100                             {
    101                                 if (!Convert.IsDBNull(item[i]))
    102                                 {
    103                                     object v = null;
    104                                     if (info.PropertyType.ToString().Contains("System.Nullable"))
    105                                     {
    106                                         v = Convert.ChangeType(item[i], Nullable.GetUnderlyingType(info.PropertyType));
    107                                     }
    108                                     else
    109                                     {
    110                                         if (info.PropertyType.BaseType != null && info.PropertyType.BaseType.ToString().Contains("System.Enum"))
    111                                         {
    112                                             //将字符串转换为枚举对象
    113                                             //v = Enum.Parse(info.PropertyType, item[i].ToString());
    114                                             v = int.Parse(item[i].ToString());
    115                                         }
    116                                         else
    117                                         {
    118                                             v = Convert.ChangeType(item[i], info.PropertyType);
    119                                         }
    120                                     }
    121                                     info.SetValue(s, v, null);
    122                                 }
    123                             }
    124                             catch (Exception ex)
    125                             {
    126                                 throw new Exception("字段[" + info.Name + "]转换出错," + ex.Message);
    127                             }
    128                         }
    129                     }
    130                     list.Add(s);
    131                 }
    132             }
    133             else if (typeof(T).BaseType == typeof(System.ValueType))
    134             {
    135                 try
    136                 {
    137                     foreach (DataRow item in dt.Rows)
    138                     {
    139                         for (int i = 0; i < dt.Columns.Count; i++)
    140                         {
    141                             if (item[i] != DBNull.Value && item[i] != null)
    142                             {
    143                                 if (plist.Count > 0)
    144                                 {
    145                                     list.Add((T)((object)Convert.ChangeType(item[i], plist.LastOrDefault()?.PropertyType)));
    146                                 }
    147                                 else
    148                                 {
    149                                     if (item[i].GetType().ToString() == "System.Int64" && typeof(T).FullName == "System.Int32")
    150                                     {
    151                                         list.Add((T)((object)int.Parse(item[i].ToString())));
    152                                     }
    153                                     else
    154                                     {
    155                                         list.Add((T)((object)item[i]));
    156                                     }
    157                                 }
    158                             }
    159                             else
    160                             {
    161                                 list.Add((T)(object)null);
    162                             }
    163                         }
    164                     }
    165                 }
    166                 catch (Exception ex)
    167                 {
    168                     throw new Exception("类型[" + typeof(T) + "]转换出错," + ex.Message);
    169                 }
    170             }
    171             return list;
    172         }
    173 
    174     }

    Nuget 引用及版本

    帮助类:

    Model 

     Repository

    Service

    API 

  • 相关阅读:
    Java 多线程同步的五种方法
    MySQL中的内连接、左连接、右连接、全连接、交叉连接
    java中线程安全和非线程安全的集合
    hashCode和equal
    MySQL中char、varchar和nvarchar的区别
    MySQL存储引擎
    String在内存中如何存储(Java)
    String、StringBuffer、StringBuilder区别
    MySQL中的事务
    gbk、utf-8、utf8mb4区别
  • 原文地址:https://www.cnblogs.com/zhaokunbokeyuan256/p/11423522.html
Copyright © 2020-2023  润新知