C#程序调试错误集

目录

1.依赖注入错误System.InvalidOperationException: Unable to resolve service for type 'xxx' while attempting to activate 'xxx'.

1.1 出错现象

System.InvalidOperationException: Unable to resolve service for type 'IBMS.Infrastruct.UoW.UnitOfWork' while attempting to activate 'IBMS.WEBAPI.Controllers.ValueController'.

出错图片如下:

1.1.1原因是net core在调用ValueController的时候,发现UnitOfWork没有进行依赖注入。

1.2 出错现象

System.InvalidOperationException: Unable to resolve service for type 'IBMS.Infrastruct.Context.IPBoxContext' while attempting to activate 'IBMS.Infrastruct.UoW.UnitOfWork'.

出错图片如下:

1.2.1 原因是net core在调用UnitOfWork的时候,发现IPBoxContext没有进行依赖注入。

1.3 解决方法

在startup.cs中的ConfigureServices方法中进行依赖注入

      services.AddDbContext<IIPBoxContext, IPBoxContext>(options =>
options.UseMySql(Configuration.GetConnectionString("MySqlConnection")));
services.AddScoped<IIPBoxRepository, IPBoxRepository>();
services.AddScoped(typeof(UnitOfWork));//注入工作单元
services.AddScoped(typeof(IPBoxContext));

注意:IPBoxContext进行AddDbContext注入数据上下文之后,仍需要注入services.AddScoped(typeof(IPBoxContext))。

2. 未创建实例错误

2.1 出错现象Object reference not set to an instance of an object.

出错图片如下:

2.1.1 原因是没有创建数据库上下文对象

2.2 出错现象System.ArgumentNullException: Value cannot be null.

出错图片如下:

2.2.1 原因是没有创建数据库上下文对象

2.3 解决方法

在服务层创建一个实例的仓储,并传入其对应的数据上下文。

    public class IPBoxServices : ServicesBase<IPBox>, IIPBoxServices
{
public IPBoxContext DbContext { get; set; } = null;
public IPBoxServices(IPBoxContext dbContext)
{
DbContext = dbContext;
} #region 字段
private IPBoxRepository _IPBoxRepository = null;
#endregion #region 操作类属性
public IPBoxRepository IPBoxRepository => _IPBoxRepository ?? (_IPBoxRepository = new IPBoxRepository(DbContext));
#endregion }

备注:这里最好是在RepositoryBase里直接通过数据库工厂模式创建一个数据库的上下文,这样不会让仓储层泄露到应用层。当然以上方法基本没什么很大影响。

3.传入EF Core 拉姆达(lambda)表达式为空报错

3.1 出错现象

System.ArgumentNullException: Value cannot be null. at lambda_method(Closure , Object , Object[] )

出错图片如下

3.1.1 原因

获取列表数据时传入lambda表达式为空。具体如下。

AlarmList = _alarmServices.GetList();

3.2解决方法

当lambda表达式为空时,直接返回列表数据。问题得到有效解决

           if (predicate == null)
{
return _dbSet.ToList();
}

整个代码块如下:

        public List<TEntity> GetList(Expression<Func<TEntity, bool>> predicate = null, string ordering = "", bool isNoTracking = true)
{
if (predicate == null)
{
return _dbSet.ToList();
}
var data = isNoTracking ? _dbSet.Where(predicate).AsNoTracking() : _dbSet.Where(predicate);
if (!string.IsNullOrEmpty(ordering))
{
data = data.OrderByBatch(ordering);
}
return data.ToList();
}

4.泛型类约束出错

4.1 什么是泛型类约束

where TEntity : class

表示TEntity必须是一个类。

4.2 出错现象

错误 CS0311 类型“TEntity”不能用作泛型类型或方法“DbContextExtensions.UpdatePerfect(DbContext, params TEntity[])”中的类型参数“TEntity”。没有从“TEntity”到“IBMS.Domain.Core.Models.IEntity”的隐式引用转换。

4.2.1 解释

仓储层的TEntity不能用做扩展层的TEntity。因为一个是需要包含IEntity,而一个是没有包含

4.3 出错原因

实际的Entity调用中用了IEntity字段,但是仓储层中没有包含IEntity。

4.4 解决

仓储层包含IEntity的泛型约束即可。

where TEntity : class,IEntity

问题得到圆满解决。

5.无法将'System.Boolean'类型转化到 'System.SByte'类型

5.1 错误提示

System.InvalidCastException: Unable to cast object of type 'System.Boolean' to type 'System.SByte'.

5.2 错误原因

数据库mysql设置了tinyint(1)类型(mysql会自动将其转化成bool类型),而C#中是byte类型。导致bool与byte (tinyint)之间无法转化。

5.3 解决方法

在mysql连接字符串中加入TreatTinyAsBoolean=false;这样,mysql不会将tinyint转化成bool类型。即可解决问题

6.log4Net已经没法满足Net Core 3.1了,可以生成包,但是依赖过低了,无法打包发布。智能能够生成VS工具里面运行。

6.1 错误提示

6.2 错误原因

依赖包过低,该插件也没在维护。

6.3 解决方法

换用Nlog。

C# net core程序调试错误集(持续更新)的更多相关文章

  1. DataStage 错误集(持续更新)

    DataStage 错误集(持续更新) DataStage序列文章 DataStage 一.安装 DataStage 二.InfoSphere Information Server进程的启动和停止 D ...

  2. Android源码编译常见错误(持续更新)

    本文为个人工作中处理遇到的编译问题做个小结,后续遇到新的问题,持续更新. No such file or directory: 1. 检查路径是否有问题,文件是否存在,若文件存在且路径没问题 2. 检 ...

  3. tensorflow安装调试总结(持续更新)

    这段时间需要部署tensorflow到linux上,由于堡垒机不能连外网,所以pip.apt-get.wget.git统统不能用,然后就是各种调试了,下面整理了一些遇到的问题和解决方案,供大家参考(C ...

  4. hadoop基础----hadoop实战(九)-----hadoop管理工具---CDH的错误排查(持续更新)

    在CDH安装完成后或者CDH使用过程中经常会有错误或者警报,需要我们去解决,积累如下: 解决红色警报 时钟偏差 这是因为我们的NTP服务不起作用导致的,几台机子之间有几秒钟的时间偏差. 这种情况下一是 ...

  5. C#/.NET/.NET Core学习视频汇总(持续更新ing)

    前言: 之前有很多小伙伴在我的公众号后台留言问有没有C#/.NET/.NET Core这方面相关的视频推荐,我一般都会推荐他们去B站搜索一下.今天刚好有空收集了网上一些比较好的C#/.NET/.NET ...

  6. IIS发布站点错误收集(持续更新)

    本文主要收集IIS在发布站点过程中遇到的错误,并提供解决办法.并亲测可行.如果您也在使用IIS发布站点的过程中遇到了一些问题,欢迎留言提问. (1.) HTTP错误500.21-Internal Se ...

  7. ACM 刷题错误总结 持续更新并持续回想中o(╯□╰)o

    一.段错误/RE 1.& 变量取地址 2.数组越界 3.爆栈, 非常可能是死循环,ruturn的边界没有处理好,或者是递归的内容里有死循环的部分. 4.线段树 逢写必错,都是build(i*2 ...

  8. mongodb管理副本集(持续更新中)

         许多维护工作不能在备份节点上完成 因为要写操作,也不能在主节点上进行,这就需要单机模式启动服务器, 是指重启成员服务器,让他成为一个单机运行的服务器,而不再是副本集中的一员(临时的) 在单机 ...

  9. ios 常见错误整理 持续更新

    本文转载至 http://blog.csdn.net/yesjava/article/details/8086185  1. mutating method sent to immutable obj ...

随机推荐

  1. 华为云EI人脸识别接口初探

    0. 准备工作 开户及申请开通人脸识别服务,可以参考https://education.huaweicloud.com:8443/courses/course-v1:HuaweiX+CBUCNXE01 ...

  2. 《一张图看懂华为云BigData Pro鲲鹏大数据解决方案》

    8月27日,华为云重磅发布了业界首个鲲鹏大数据解决方案--BigData Pro.该方案采用基于公有云的存储与计算分离架构,以可无限弹性扩容的鲲鹏算力作为计算资源,以支持原生多协议的OBS对象存储服务 ...

  3. 深入理解Android异步消息处理机制

    一.概述 Android 中的异步消息处理主要分为四个部分组成,Message.Hndler.MessageQueue 和 Looper.其关系如下图所示: 1. Message 是线程之间传递的消息 ...

  4. 一台电脑如何管理多个ssh key

    目录 一.生成ssh key 1.1 生成密钥(必须) 1.2 设置路径 (可选) 1.3 指定密语字符串(可选) 二.设置ssh key的代理 2.1. 首先查看代理 2.2. 添加私钥 三.添加公 ...

  5. 2017 CCPC秦皇岛 A题 A Ballon Robot

    The 2017 China Collegiate Programming Contest Qinhuangdao Site is coming! There will be  teams parti ...

  6. E1.Send Boxes to Alice(Easy Version)//中位数

    发送盒子给Alice(简单版本) 题意:准备n个盒子放巧克力,从1到n编号,初始的时候,第i个盒子有ai个巧克力. Bob是一个聪明的家伙,他不会送n个空盒子给Alice,换句话说,每个盒子里面都有巧 ...

  7. Java并发编程系列-(1) 并发编程基础

    1.并发编程基础 1.1 基本概念 CPU核心与线程数关系 Java中通过多线程的手段来实现并发,对于单处理器机器上来讲,宏观上的多线程并行执行是通过CPU的调度来实现的,微观上CPU在某个时刻只会运 ...

  8. 【关注图像采集视频传输】之 Cy3014 usb3.0 FIFO接口

    CYUSB3014延续了CY7C68013A最吸引人的地方,那就是实现高速数据传输的Slave FIFO接口,应用这种模式,据说数据传输率可以达到320MB/s. 同USB2.0的芯片CY7C6801 ...

  9. Python的re模块,正则表达式书写方法

    Python的re模块,正则表达式 #导入re模块 import  re 1.match方法的使用: result = re.match(正则表达式,待匹配的字符串) 正则表达式写法: 第一部分: 字 ...

  10. C#中关于值类型和引用类型的区别

    小声哔哔 一直以来对于值类型与引用类型之间的区别都不是特别清晰,直到踩了坑.... 正好最新闲暇,便想着梳理梳理这一两年来遇到的奇葩问题和解决方案,顺便就把它给拎出来记一下,免得以后再摔跤 值类型与引 ...