首页 > 其他分享 > abp(net core)+easyui+efcore实现仓储管理系统——ABP升级7.3下(五十九)

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

时间:2023-04-01 20:33:46浏览次数:69  
标签:core moduleRepository easyui TPLMS abp ABP using net

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(net core)+easyui+efcore实现仓储管理系统——创建应用服务(五) abp(net core)+easyui+efcore实现仓储管理系统——使用 WEBAPI实现CURD (十一) abp(net core)+easyui+efcore实现仓储管理系统——EasyUI之货物管理一 (十九) abp(net core)+easyui+efcore实现仓储管理系统——ABP WebAPI与EasyUI结合增删改查之一(二十七) abp(net core)+easyui+efcore实现仓储管理系统——入库管理之一(三十七) 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,不过,这只是第一步,在后续测试中,应该还会有一些问题。

 

标签:core,moduleRepository,easyui,TPLMS,abp,ABP,using,net
From: https://www.cnblogs.com/chillsrc/p/17279290.html

相关文章

  • aspnet core系统优雅停机升级
    web项目在生产环境要求:停机时需要确保running的请求能被安全处理完毕停机时确保不接收新的请求需要有healthCheck接口Loadbalancer能对接healthCheck接口,确保业务能达到zerodowntimeupdate实现机制:文章:Simplezero-downtimeupdateswithASP.NETCorea......
  • .NetCore中使用分布式事务DTM的二阶段消息
    一、概述二阶段消息是DTM新提出的,可以完美代替现有的事务消息和本地消息表架构。无论从复杂度、性能、便利性还是代码量都是完胜现有的方案。相比现有的消息架构借助于各种消息中间件比如RocketMQ等,DTM自己实现了无需额外的学习成本。它能够保证本地事务的提交和全局事务提交是......
  • asp.net core 开启gzip压缩
    //第一步:配置gzip与br的压缩等级为最优services.Configure<BrotliCompressionProviderOptions>(options=>{options.Level=CompressionLevel.Optimal;});services.Configure<GzipCompressionProvid......
  • 自动生成接口文档coreapi的使用
    1.安装coreapi  2.路由中配置路由固定格式   3.视图类自动生成接口文档第一种_单一方法的视图   4.第二种_包含多个方法的视图_在类视图的文档字符串中_分开方法定义   5.生成接口文档的setting和路由配置   5_1.生成接口文档的setting......
  • 使用EFCore的Code First和MySql数据库迁移(转载 )
    下辈子还当程序员 博客园首页新随笔联系订阅管理随笔-4  文章-0  评论-9  阅读- 44432使用EFCore的CodeFirst和MySql数据库迁移 1.感慨一下    随着.netcore的持续更新和升级,至少对于从事.net开发的人员和即将踏入这个领域......
  • ASP.NET CORE开发 (三)
    1.在使用singleton时出现 Cannotresolvescopedservice'AlgoTag.Models.AlgoContext'fromrootprovider.https://www.cnblogs.com/liuzeqi/p/14132325.html原因:一般情况下,生命周期较长的服务不应该依赖一个生命周期较短的服务,Scope的服务被Singleton的服务依赖/引用,那么......
  • CSharp: Tesseract OCR V5.0 in donet core 3.1
    Referenceresourceshttps://github.com/alex-doe/open-ocr-dotnethttps://github.com/tleyden/open-ocr/gohttps://github.com/DayBreak-u/chineseocr_litehttps://github.com/pjreddie/darknethttps://sourceforge.net/projects/vietocr/https://github.com/PaddlePaddle/......
  • Asp.Net Core 动态生成WebApi
    在WebApi架构体系中,一般需要先编写应用服务实现,再通过编写Controller来实现应用服务的Web接口。Controller中的代码作用仅仅是调用Service的方法,将Service提升为Web接口,其实完全可以通过动态生成WebApi来减少编码工作。在.Net示例项目ABP中已经实现了动态生成WebApi的功能,Panda.Dy......
  • ChCore—实验 3:进程与线程、异常处理 部分记录
    思考题1:内核从完成必要的初始化到用户态程序的过程是怎么样的?尝试描述一下调用关系。内核启动到用户程序启动的流程:main├──uart_init├──mm_init├──arch_interrupt_init├──create_root_thread│├──create_root_cap_group│├──__create_......
  • ABP VNext 的日志机制 + SeriLog
    **ABPVNext的日志机制**正用ABPVNext做个系统,由于框架默认带来日志处理机制,开发阶段基本能用,也一直没有去动它,快要上线了,思考了一下正式环境的日志管理流程,由于系统不大,预计访问量可能也不大,但默认的日志管理太简单,不便于后期日常维护。缺点如下:默认的日志只有单个文件,写上几......