升级版本:

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>

 public static class DataContextExtend
{
public static List<T> SqlQuery<T>(this DatabaseFacade facade, string sql, params object[] parameters)
{
using (var conn = new MySqlConnection(facade.GetDbConnection().ConnectionString))
{
conn.Open();
var ds = new DataSet();
using (var da = new MySqlDataAdapter(sql, conn.ConnectionString))
{
if (parameters.Any())
{
da.SelectCommand.Parameters.AddRange(parameters);
}
da.Fill(ds);
} conn.Close();
if (ds.Tables.Count > )
{
return ToDataList<T>(ds.Tables[]);
}
else
{
return new List<T>();
}
}
}
/// <summary>
/// 返回首行首列
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="facade"></param>
/// <param name="sql"></param>
/// <param name="parameters"></param>
/// <returns></returns>
public static T SqlCount<T>(this DatabaseFacade facade, string sql, params object[] parameters)
{
using (var conn = new MySqlConnection(facade.GetDbConnection().ConnectionString))
{
conn.Open();
T result;
var ds = new DataSet(); using (var commend = new MySqlCommand(sql, conn))
{
if (parameters.Any())
commend.Parameters.AddRange(parameters);
result = (T)commend.ExecuteScalar();
} conn.Close(); return result; } } /// <summary>
/// DataTable转成List
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="dt"></param>
/// <returns></returns>
public static List<T> ToDataList<T>(this DataTable dt)
{
var list = new List<T>();
var plist = new List<PropertyInfo>(typeof(T).GetProperties());
if (typeof(T) == typeof(string))
{
foreach (DataRow givenObject in dt.Rows)
{
for (int i = ; i < dt.Columns.Count; i++)
{
if (givenObject[i] != DBNull.Value && givenObject[i] != null)
{
var instance = givenObject[i].ToString(); // Your custom conversion to string.
list.Add((T)(object)instance);
}
else
{
list.Add((T)(object)null);
}
}
}
}
else if (typeof(T).IsClass)
{
foreach (DataRow item in dt.Rows)
{
T s = Activator.CreateInstance<T>();
for (int i = ; i < dt.Columns.Count; i++)
{
PropertyInfo info = plist.Find(p => p.Name.ToUpper() == dt.Columns[i].ColumnName.ToUpper());
if (info != null)
{
try
{
if (!Convert.IsDBNull(item[i]))
{
object v = null;
if (info.PropertyType.ToString().Contains("System.Nullable"))
{
v = Convert.ChangeType(item[i], Nullable.GetUnderlyingType(info.PropertyType));
}
else
{
if (info.PropertyType.BaseType != null && info.PropertyType.BaseType.ToString().Contains("System.Enum"))
{
//将字符串转换为枚举对象
//v = Enum.Parse(info.PropertyType, item[i].ToString());
v = int.Parse(item[i].ToString());
}
else
{
v = Convert.ChangeType(item[i], info.PropertyType);
}
}
info.SetValue(s, v, null);
}
}
catch (Exception ex)
{
throw new Exception("字段[" + info.Name + "]转换出错," + ex.Message);
}
}
}
list.Add(s);
}
}
else if (typeof(T).BaseType == typeof(System.ValueType))
{
try
{
foreach (DataRow item in dt.Rows)
{
for (int i = ; i < dt.Columns.Count; i++)
{
if (item[i] != DBNull.Value && item[i] != null)
{
if (plist.Count > )
{
list.Add((T)((object)Convert.ChangeType(item[i], plist.LastOrDefault()?.PropertyType)));
}
else
{
if (item[i].GetType().ToString() == "System.Int64" && typeof(T).FullName == "System.Int32")
{
list.Add((T)((object)int.Parse(item[i].ToString())));
}
else
{
list.Add((T)((object)item[i]));
}
}
}
else
{
list.Add((T)(object)null);
}
}
}
}
catch (Exception ex)
{
throw new Exception("类型[" + typeof(T) + "]转换出错," + ex.Message);
}
}
return list;
} }

Nuget 引用及版本

帮助类:

Model

Repository

Service

API

.netFramework 升级NetCore 问题汇总及解决方案的更多相关文章

  1. H5项目常见问题汇总及解决方案

    H5项目常见问题汇总及解决方案 H5   2015-12-06 10:15:33 发布 您的评价:       4.5   收藏     4收藏 H5项目常见问题及注意事项 Meta基础知识: H5页 ...

  2. flume常见异常汇总以及解决方案

    flume常见异常汇总以及解决方案 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际生产环境中,我用flume将kafka的数据定期的往hdfs集群中上传数据,也遇到过一系列的坑 ...

  3. 【转】使用kettle工具遇到的问题汇总及解决方案

    使用kettle工具遇到的问题汇总及解决方案   转载文章版权声明:本文转载,原作者薄海 ,原文网址链接 http://blog.csdn.net/bohai0409/article/details/ ...

  4. H5 常见问题汇总及解决方案

    原文链接:http://mp.weixin.qq.com/s/JVUpsz9QHsNV0_7U-3HCMg H5 项目常见问题汇总及解决方案 -- 由钟平勇分享 转自 https://github.c ...

  5. Android 实现应用升级方案(暨第三方自动升级服务无法使用后的解决方案)

    第三方推送升级服务不再靠谱: 以前在做Android开发的时候,在应用升级方面都是使用的第三方推送升级服务,但是目前因为一些非技术性的问题,一些第三方厂商不再提供自动升级服务,比如友盟,那么当第三方推 ...

  6. H5项目常见问题汇总及解决方案(果断复制粘贴,不解释)

    H5项目常见问题及注意事项 Meta基础知识: H5页面窗口自动调整到设备宽度,并禁止用户缩放页面 //一.HTML页面结构 <meta name="viewport" co ...

  7. 重回程序员之路。重写博客。我的ecshop小京东二开问题汇总与解决方案。

    问题1:混合支付(余额支付+在线支付)不跟更新订单状态问题. 解决方案:http://bbs.ecshop.com/viewthread.php?tid=156761&highlight= i ...

  8. linux中python环境搭建及升级后yum不可用解决方案

    1.1 LinuxCentOS 为例.1.1.1 升级 Python(1) 下载 Python 版本$ wget https://www.python.org/ftp/python/2.7.11/Py ...

  9. C#版微信公众号支付|微信H5支付|微信扫码支付问题汇总及解决方案总结

    最近负责的一些项目开发,都用到了微信支付(微信公众号支付.微信H5支付.微信扫码支付).在开发的过程中,在调试支付的过程中,或多或少都遇到了一些问题,今天总结下,分享,留存.代码在文章结尾处,有需要的 ...

随机推荐

  1. 方便前端使用的SVG雪碧图

    更多代码详情:github.crmeb.net/u/LXT 简介 由于SVG自身的矢量性质,不管在什么情况下,图标都很清晰,可以适应不同尺寸大小和不同分辨率.不用担心模糊和锯齿.同时还能更改图标的填充 ...

  2. maven cmd 命令

    1. mvn clean install :重新清理打包 2.详见:https://www.cnblogs.com/lukelook/p/11298168.html mvn  versions:upd ...

  3. python3实现unix域协议(tcp、udp)通讯

    socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIXDomain Socket.虽然网络socket也可用于同一台主机的进程间通讯(通过loopb ...

  4. Vue.js源码中大量采用的ES6新特性介绍:模块、let、const

    1 关于ES6      ECMAScript6(以下简称ES6)是JavaScript语言的最新一代标准,发布于2015年6月,因为ECMA委员会决定从ES6起每年更新一次标准,因此ES6被改名为E ...

  5. 二进制安装docker-18.06.3-ce

    二进制安装docker 1,下载 https://download.docker.com/linux/static/stable/x86_64/docker-18.06.3-ce.tgz 2,解压, ...

  6. IAR常用快捷键和使用小技巧

    1.复制和粘贴几行的部分代码 需求:有时候我们需要复制几行代码的后半部分,不需要复制前半部分.方法:按住Alt键,再用鼠标拖动就可以复制和粘贴后半部分 2.复制一行 复制一行的时候,我们一般是从最后开 ...

  7. python中while循环的基本使用

    一.while循环 while 条件:              如果条件为True,会一直循环 代码块(循环体) else: 当上面的条件为假.才会执行 执行顺序:判断条件是否为真.如果真,执行循环 ...

  8. IT公司该如何落实机器学习?

    Cisco发布的总结报告<泽字节时代:趋势和分析>中指出:2016年末,全球年度互联网流量将突破ZB大关(1ZB泽字节:1000EB艾字节),并将于2020年达到2.3ZB;互联网的流量将 ...

  9. LG3768 简单的数学题

    P3768 简单的数学题 题目描述 输入一个整数n和一个整数p,你需要求出$(\sum_{i=1}^n\sum_{j=1}^n ijgcd(i,j))~mod~p$,其中gcd(a,b)表示a与b的最 ...

  10. vim编辑提示存在临时文件,删除隐藏的*.swp文件即可

    在Linux下vim编辑过程中,由于某种原因异常退出正在编辑的文件,再次编辑该文件时,会出现如下提示: 使用vim编辑文件实际是先copy一份临时文件并映射到内存给你编辑,编辑的是临时文件,当执行:w ...