升级版本:

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. 将Centos7的yum配置为阿里云的镜像(完美解决yum下载太慢的问题)

    2017-02-17 16:02:30 张老湿 阅读数 13768     http://mirrors.aliyun.com/help/centos?spm=5176.bbsr150321.0.0. ...

  2. 逗号分隔的字符串转成表格参与IN条件查询

    返回值为'1,2,3,4,5,6,7',是一个字符串,如果要用IN 查询的话sql认为这是一个完整的字符串,需要将内容分隔转换变成table 定义函数如下: create Function sysfS ...

  3. OSS阿里云相关文档

    OSS阿里云相关文档 oss文档链接

  4. 常见EMC疑问及对策

    1. 在电磁兼容领域,为什么总是用分贝(dB)的单位描述?10mV是多少dBmV? 答:因为要描述的幅度和频率范围都很宽,在图形上用对数坐标更容易表示,而dB就是用对数表示时的单位,10mV是20dB ...

  5. Angular CLI behind the scenes, part one

    原文:https://commandlinefanatic.com/cgi-bin/showarticle.cgi?article=art074 --------------------------- ...

  6. 抖音热门BGM爬虫下载

    下午无聊在某网上刷了会儿抖音,发现有些音乐还是挺好听的,可以用来做手机铃声,于是想办法从某网上把歌曲爬下来 附上代码: #!/usr/bin/env python # -*- coding: utf- ...

  7. Keras神经网络data generators解决数据内存

    在使用kears训练model的时候,一般会将所有的训练数据加载到内存中,然后喂给网络,但当内存有限,且数据量过大时,此方法则不再可用.此博客,将介绍如何在多核(多线程)上实时的生成数据,并立即的送入 ...

  8. HDU - 6125: Free from square (状压DP+分组背包)

    problem:给定N,K.表示你有数1到N,让你最多选择K个数,问有多少种方案,使得选择的数的乘积无平方因子数.N,K<500: solution:显然可以状压DP做,但是500以内的素数还是 ...

  9. c++中的static,const,const static以及它们的初始化

    const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间. static表示的是静态的.类的静态成员函数.静态成员变量是和类相关的,而不是和类的 ...

  10. yum 安装 出错 Error: Protected multilib versions:

    例如:安装zlib出错 yum install zlib-1.2.3-29.el6.i686 Error: Protected multilib versions: zlib-1.2.3-29.el6 ...