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. 硬核! 逛了4年Github ,一口气把我收藏的 Java 开源项目分享给你!

    Awsome Java Great Java project on Github(Github 上非常棒的 Java 开源项目). English Version 大家都知道 Github 是一个程序 ...

  2. kettle教程---kettle作业调度,附件(excel)配置表名,一个调度完成所有的表操作

    在平时工作当中,会遇到这种情况:复制一个库,几百甚至上千张表,并且无法设置dblink,此时通过kettle可以快速完成该任务. 按照正常的调度,有几百张表,咱们就要写几百个转换去处理,很不科学,下面 ...

  3. Codeforces-501b

    Misha hacked the Codeforces site. Then he decided to let all the users change their handles. A user ...

  4. [Python Basics]下划线变量

    夜暗归云绕柁牙,江涵星影鹭眠沙. 行人怅望苏台柳,曾与吴王扫落花. 我平时很常见到的带有下划线的python变量有两种: 前后双下划线,我之前的理解是python程序中的类似meta data的信息, ...

  5. Linux中sed基础

    sed是一种流编辑器,它是文本处理中非常重要的工具,能够完美的配合正则表达式使用,功能不同凡响.处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern spac ...

  6. 如何正确的使用Python解释器?你之前肯定用错了

    作为python开发者,当我们编写Python代码时,我们得到的是一个包含Python代码的以.py为扩展名的文本文件.要运行代码,就需要Python解释器去执行.py文件.由于整个Python语言从 ...

  7. ARTS-S python把非汉语和非字母的字符替换成空格

    # coding: utf-8 import re text = "aa[bb,aa#cWc中a国" FILTER_PUNTS = re.compile("[^\u4E0 ...

  8. HTML 02

    form表单 能够获取用户输入(包括输入, 选择和上传文件) 将用户的输入内容全部发送给后端 参数 action 向何处提交 不写, 默认朝当前页面所在地址提交数据 全写路径 (https://www ...

  9. Orleans 文档记录

    Orleans 官方文档:官方文档 http://dotnet.github.io/orleans/index.html Orleans 中文文档:中文文档 https://orleanscn.git ...

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

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