abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3

news2024/11/18 13:55:57

第四个问题

        升级过程中碰到的第四个问题: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')

 

         经过一番的资料搜集,最后在官网的文档(Articles Tutorials | AspNet Boilerplate)中找到以下这段,说明了这个错误。解决方案也在文档中。

          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,不过,这只是第一步,在后续测试中,应该还会有一些问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/791558.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

临时文档4

Redis有哪些数据类型 Redis主要有5种数据类型&#xff0c;包括String&#xff0c;List&#xff0c;Set&#xff0c;Zset&#xff0c;Hash&#xff0c;满足大部分的使用要求 Redis的应用场景 总结一 计数器 可以对 String 进行自增自减运算&#xff0c;从而实现计数器功能。…

区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测

区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测 目录 区间预测 | MATLAB实现QRLSTM长短期记忆神经网络分位数回归多输入单输出区间预测效果一览基本介绍模型描述程序设计参考资料 效果一览 基本介绍 MATLAB实现QRLSTM长短期记忆神经网络分位数回…

Rancher 安装部署

1、执行如下docker 命令 rootubuntu:~# docker run --namerancher -d --privileged --restartunless-stopped -p 30040:80 -p 30050:443 rancher/rancher:latest 这里将80端口映射成了30040端口&#xff0c;将443端口映射成了30050端口&#xff0c;所以在执行上面的名字之前&…

VSPD虚拟串口软件安装及使用

文章目录 前言一、软件安装1、Configure Virtual Serial Port Driver(VSPD)2、串口调试助手 二、使用步骤1、模拟串口2、配置串口3、收发测试①、COM8&#xff08;发&#xff09; ---> COM9&#xff08;收&#xff09;②、COM9&#xff08;发&#xff09; ---> COM8&…

DevExpress WPF Tree List组件,让数据可视化程度更高!(一)

DevExpress WPF Tree List组件是一个功能齐全、数据感知的TreeView-ListView混合体&#xff0c;可以把数据信息显示为REE、GRID或两者的组合&#xff0c;在数据绑定或非绑定模式下&#xff0c;具有完整的数据编辑支持。 DevExpress WPF 拥有120个控件和库&#xff0c;将帮助您…

XCP详解「3.3·A2L信号添加和更新」

返回 XCP详解「总目录」 目录 1、ELF/MAP文件发生变更 2、添加新信号 1、ELF/MAP文件发生变更 elf文件更新后&#xff0c;状态栏会有图标闪烁提示 ​ 选个要更新的map文件即可 ​ 2、添加新信号 在Offlin的状态下进入编辑A2L文件&#xff0c;编辑过程参照3.1 ​ AS…

华为数通HCIA-网络模型

TCP 网络通信模式 作用&#xff1a;指导网络设备的通信&#xff1b; OSI七层模型&#xff1a; 7.应用层&#xff1a;由应用层协议&#xff08;http、FTP、Telnet.&#xff09;为应用程序产生对应的数据&#xff1b; 6.表示层&#xff1a;将应用层产生的数据转换成网络设备看…

Java毕业设计—爱宠医院管理系统设计与实现【含源码、论文】

爱宠医院管理系统 获取数论文、代码、答辩PPT、安装包&#xff0c;可以查看文章底部 一、 如何安装及配置环境 要运行整个爱宠医院管理系统需要安装数据库&#xff1a;MySQL 5.5&#xff0c;开发工具&#xff1a;JDK 1.8&#xff0c;开发语开发平台&#xff1a;Eclipse&…

使用mydumper进行数据库备份还原

1.使用school数据库 create database school; use school;2.创建student&#xff0c;score表 student表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VAR…

产教融合与校企合作

1. 什么是产教融合&#xff1f; 产教融合是指职业学校根据所设专业积极开班专业产业&#xff0c;把产业与教学密切结合&#xff0c;相互支持&#xff0c;相互促进&#xff0c;把学校办成集人才培养、科学研究、科技服务为一体的产业性经营实体&#xff0c;形成学校与企业浑然一…

SpringBoot登陆+6套前端主页-【JSB项目实战】

SpringBoot系列文章目录 SpringBoot知识范围-学习步骤【JSB系列之000】 文章目录 SpringBoot系列文章目录本系列校训 SpringBoot技术很多很多环境及工具&#xff1a;上效果图主页登陆 配置文件设置导数据库项目目录如图&#xff1a;代码部分&#xff1a;控制器过滤器详细的解…

社区发现快速入门

社区发现快速入门 一、图&#xff1a;关系型数据的一种描述方式 关系型数据&#xff0c;又名“表格数据”&#xff0c;指关系数学模型中以二维表的形式来描述的数据&#xff0c;它以表格形式组织&#xff0c;使用行和列来存储和表示数据之间的关系。 关系型数据可以用实体、…

【leetcode】206.反转链表

思路1&#xff1a;取原链表的节点&#xff0c;依次头插到新链表&#xff0c;返回新链表的头 示例一反转步骤如下&#xff1a; &#x1f4d6;Note: 当cur ! NULL时&#xff0c;将cur指向的节点头插入新链表&#xff0c;首先要更改cur->next的值为newhead->next&#xff0c…

LiveNVR监控流媒体Onvif/RTSP常见问题-token有效期是多久如何设置token有效期StreamToken和URLToken

LiveNVR中token有效期是多久如何设置token有效期StreamToken和URLToken 1、获取TOKEN2、TOKEN有效期3、默认token有效期3、自定义token加密key3.1、token_key3.2、stream_token_key 4、如何配置一直有效的token4.1、URLToken4.2、StreamToken 5、动态有效期6、流地址鉴权开启后…

城市气象数据可视化:洞察气候变化,构建智慧城市

随着城市化进程的加速&#xff0c;城市气象数据的采集和分析变得越来越重要。气象数据不仅影响着人们的生活和出行&#xff0c;还与城市的发展和规划息息相关。在数字化时代&#xff0c;如何将城市中各个气象数据进行可视化&#xff0c;让复杂的数据变得简单易懂&#xff0c;成…

Linux 下使用crontab 定时打包日志并删除已被打包的日志

crontab是和用户相关的&#xff0c;每个用户有自己对应的crontab 。 cron是Linux下的定时执行工具&#xff0c;以下是重启/关闭等等的命令 #/sbin/service crond start //启动服务 #/sbin/service crond stop //关闭服务 #/sbin/service crond restart //重启服务 #/…

外壳-零基础不求人设计PCB外壳

实机演示 2D 3D 导入PCB 除了在立创eda专业版layout的可以直接做外壳 在其它EDA设计的都需要先导入PCB(如altium) 放置边框 放置正面挖槽 放置侧面挖槽 放置需要先放置侧面基准线 这样再选择侧面挖槽 选择创建的基准线就可以侧面开孔 放置上下盖固定螺丝孔 第一步上下…

【C++ OJ练习】9.最小栈

1.题目链接 力扣 2.解题思路 利用两个栈实现 3.代码 class MinStack { public:MinStack() {//两个栈来实现}void push(int val) {_st.push(val);if (_minst.empty() || _minst.top() > val){_minst.push(val);}}void pop() {if (_st.top() _minst.top())_minst.pop();…

odoo 开发入门教程系列-计算的字段和变更(Computed Fields And Onchanges)

计算的字段和变更(Computed Fields And Onchanges) 模型之间的关系是任何Odoo模块的关键组成部分。它们对于任何业务案例的建模都是必要的。然而&#xff0c;我们可能需要给定模型中字段之间的链接。有时&#xff0c;一个字段的值是根据其他字段的值确定的&#xff0c;有时我们…

每日一题7.26 23

162. 寻找峰值https://leetcode.cn/problems/find-peak-element/ 峰值元素是指其值严格大于左右相邻值的元素。 给你一个整数数组 nums&#xff0c;找到峰值元素并返回其索引。数组可能包含多个峰值&#xff0c;在这种情况下&#xff0c;返回 任何一个峰值 所在位置即可。 你可…