abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3下(五十九)
Abp(net core)+easyui+efcore实现仓储管理系统目录
承接上文abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3上(五十八)继续来讲讲升级过程中碰到的问题。
第四个问题
升级过程中碰到的第四个问题:Value cannot be null. (Parameter 'unitOfWork')
在Visual Studio 2022 的解决方案资源管理器中,找到ABP.TPLMS.Application项目中的Modules文件夹中的ModuleAppService.cs文件,是这个文件中的GetAll()方法报了这个错误。错误信息如下图。具体代码如下。
public List<Module> GetAll()
{ var modules= _moduleRepository.GetAllListAsync();
return modules.Result;
}

在“用户未处理的异常”信息弹出框中,使用鼠标左键点击“查看详细信息”,会弹出“快速监视”弹出框,如下图。我们看到具体的错误信息是Value cannot be null. (Parameter 'unitOfWork')

经过一番的资料搜集,最后在官网的文档(https://aspnetboilerplate.com/Pages/Documents/Unit-Of-Work#non-transactional-unit-of-work)中找到以下这段,说明了这个错误。解决方案也在文档中。
By its nature, a unit of work is transactional. ASP.NET Boilerplate starts, commits or rolls back an explicit database-level transaction. In some special cases, the transaction may cause problems since it may lock some rows or tables in the database. In these situations, you may want to disable the database-level transaction. The UnitOfWork attribute can get a boolean value in its constructor to work as non-transactional. Example usage:

在Visual Studio 2022 的解决方案资源管理器中,找到ABP.TPLMS.Application项目中的Modules文件夹中的ModuleAppService.cs文件,是这个文件中的GetAll()上方添加禁用UnitOfWork事务的特性。具体代码如下:
[UnitOfWork(isTransactional:false)]
public List<Module> GetAll()
{ var modules = _moduleRepository.GetAllListAsync();
return modules.Result;
}
第五个问题
升级过程中碰到的第五个问题:Can't create component 'ABP.TPLMS.Modules.ModuleAppService' as it has dependencies to be satisfied.Service 'AutoMapper.IMapper' which was not registered.
在Visual Studio 2022 的解决方案资源管理器中,按F5运行,Visual Studio 2022又抛出一个新的错误。这个问题实际上是之前的第三个问题的后续,由于第三个问题没有解决好,才引发了这个问题。错误信息如下图。

public class ModuleAppService : ApplicationService, IModuleAppService
{ private readonly IRepository<Module> _moduleRepository;
AutoMapper.IMapper m_map; public ModuleAppService(IRepository<Module> moduleRepository, IMapper map) {
_moduleRepository = moduleRepository;
m_map = map;
}
}
在“用户未处理的异常”信息弹出框中,使用鼠标左键点击“查看详细信息”,会弹出“快速监视”弹出框,如下图。我们看到具体的错误信息是:

具体的错误信息如下:
Can't create component 'ABP.TPLMS.Modules.ModuleAppService' as it has dependencies to be satisfied.
'ABP.TPLMS.Modules.ModuleAppService' is waiting for the following dependencies:
- Service 'AutoMapper.IMapper' which was not registered.
这个错误,说明我们的注入方式错误,AutoMapper没有注册,但是我们这是ABP,不是单独使用AutoMapper,需要单独注册,有人会去从nuget上安装automapper包,然后进行注册。我认为,应该有一种方式能解决这个问题。我找到的方法是使用ObjectMapper.Map方法,具体代码如下。
using Abp.Application.Services;
using Abp.Application.Services.Dto;
using Abp.Domain.Repositories;
using Abp.Domain.Uow;
using ABP.TPLMS.Entitys;
using ABP.TPLMS.Modules.Dto;
using AutoMapper;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data.Common;
using System.Reflection.PortableExecutable;
using System.Text;
using System.Threading.Tasks; namespace ABP.TPLMS.Modules
{
public class ModuleAppService : ApplicationService, IModuleAppService
{
private readonly IRepository<Module> _moduleRepository;
// AutoMapper.IMapper m_map; public ModuleAppService(IRepository<Module> moduleRepository)
{
_moduleRepository = moduleRepository;
// m_map =map;
}
public Task CreateAsync(CreateUpdateModuleDto input)
{
var module= ObjectMapper.Map<Module>(input);
// var module = Mapper.Map<Module>(input); return _moduleRepository.InsertAsync(module);
}
public Task UpdateAsync(CreateUpdateModuleDto input)
{
Logger.Info("更新操作-日记记录 - 模块类型的名称 为:" + input.DisplayName);
var module = ObjectMapper.Map<Module>(input);
// var module = m_map.Map<Module>(input);
return _moduleRepository.UpdateAsync(module);
}
public async Task<ListResultDto<ModuleDto>> GetAllAsync()
{
var modules = await _moduleRepository.GetAllListAsync();
return new ListResultDto<ModuleDto>(ObjectMapper.Map<List<ModuleDto>>(modules)); } [UnitOfWork(isTransactional:false)]
public List<Module> GetAll()
{
var modules = _moduleRepository.GetAllListAsync();
return modules.Result; } public async Task DeleteAsync(int Id)
{
await _moduleRepository.DeleteAsync(Id);
} public void Delete(int Id)
{
_moduleRepository.Delete(Id);
} }
}
在修改完了代码之后,在Visual Studio 2022中按F5运行,终于看到了登录界面,在登录界面中的用户名中输入admin,在密码输入框中输入123qwe这个默认密码。浏览器自动跳转到了首页面。如下图。

第六个问题:
升级过程中碰到的第六个问题:Missing type map configuration or unsupported mapping.
在浏览器的左边的菜单栏中有一个Business菜单,使用鼠标左键点击,展开。在展开的菜单栏,使用鼠标左键点击“模块管理”,Visual Studio 2022将会弹出一个错误。如下图。

在“用户未处理的异常”信息弹出框中,使用鼠标左键点击“查看详细信息”,会弹出“快速监视”弹出框,如下图。我们看到具体的错误信息是:
Missing type map configuration or unsupported mapping.
Mapping types:
Object -> CreateUpdateModuleDto
System.Object -> ABP.TPLMS.Modules.Dto.CreateUpdateModuleDto

这个错误是由于我们没有定义autoMapper需要的配置信息。
1. 在Visual Studio 2022的“解决方案资源管理器”中,左键单击“ABP.TPLMS.Application”项目,进行展开,找到“Modules\Dto”文件夹。
2.右键单击“Dto”文件夹,然后选择“添加” > “类”。 将类命名为 ModuleMapProfile,然后选择“添加”。代码如下。
using ABP.TPLMS.Authorization.Users;
using ABP.TPLMS.Entitys;
using ABP.TPLMS.Users.Dto;
using AutoMapper;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace ABP.TPLMS.Modules.Dto
{
public class ModuleMapProfile:Profile
{
public ModuleMapProfile()
{ CreateMap<ModuleDto, Module>();
CreateMap<ModuleDto, CreateUpdateModuleDto>();
CreateMap<CreateUpdateModuleDto, Module>();
}
}
}
3.在添加完ModuleMapProfile类的代码之后,在Visual Studio 2022中按F5运行,在登录界面中的用户名中输入admin,在密码输入框中输入123qwe这个默认密码。浏览器自动跳转到了首页面。
4.在浏览器的左边的菜单栏中有一个Business菜单,使用鼠标左键点击,展开。在展开的菜单栏,使用鼠标左键点击“模块管理”,然后我们看到了模块管理的页面,如下图。 
至此项目中的一些问题解决了,ABP.TPLMS能初步运行了,项目也初步升级到了ABP 7.3,不过,这只是第一步,在后续测试中,应该还会有一些问题。
abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3下(五十九)的更多相关文章
- abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之一(二十七)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——展现层实现增删改查之列表视图(七)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- 2019年7月16日 abp(net core)+easyui+efcore实现仓储管理系统——多语言(十)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十一)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十二)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十三)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十四)
abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+ ...
- abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十五)
core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+e ...
- abp(net core)+easyui+efcore实现仓储管理系统——菜单 (十六)
系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) ...
- abp(net core)+easyui+efcore实现仓储管理系统——菜单-下(十七)
实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案 ...
随机推荐
- JAVA框架入门理解
一:关于java开发的框架我们可以先从java web开发框架的变迁来给大家简单叙述一下: 1 SSH --Struts+Spring+Hibernate 2 Spring +SpringMVC + ...
- 【APT】Hades APT组织针对乌克兰发起网络攻击事件分析
背景 Hades一个充满神秘色彩的APT组织,该组织因为2017年12月22日针对韩国平昌冬奥会的攻击活动被首次发现,后来卡巴斯基将该次事件的攻击组织命名为Hades.但是该攻击组织的归属问题却一直未 ...
- Flink笔记
高可用(HA):直白来说就是系统不会因为某台机器,或某个实例挂了,就不能提供服务了.高可用需要做到分布式.负载均衡.自动侦查.自动切换.自动恢复等. 高吞吐: 单位时间内,能传输的数据量,对应指标就是 ...
- Vue Element使用第三方图标(iconfont阿里矢量图标库)
在 www.iconfont.cn 中搜索图标并加入购物车然后添加至项目,编辑项目名称 然后将项目下载至本地解压后将如下文件复制移到到 src/assets/icon中, 并把iconfont.c ...
- 学习Java的第一个代码
HelloWorld 新建一个文件夹 新建一个Java 文件后缀为java hello.java 编写代码 public class hello{ public static void main(St ...
- Centos8 中安装GitLab
Centos8 中安装GitLab 1,安装依赖 yum install -y curl policycoreutils-python openssh-server centos8没有policyco ...
- day48-Mysql安装文件结构及SQL常用语句
1.安装文件结构 bin--mysql.exe 客户端运行程序: mysqld.exe 服务端运行程序: data--数据库.数据表等文件 注:修改配置文件后需要重启服务端 2.常用SQL语句 1) ...
- 8-WebShell总结
WebShell 1.webshell介绍 在计算机科学中,Shell 俗称壳(用来区别"核"),是指"为使用者提供操作界面"的软件(命令解释器).类似于win ...
- scrapy.Request callback不执行
1.在scrapy.Request方法里边加上参数dont_filter=True(去重) 2.增加是不是allowed_domains范围内的url 3.yield Request 改为yield ...
- 按正斜线输出M*N的矩阵
public static void outMatrix(int[][] array) { for(int row=0;row<array.length;row++) { int scolumn ...