1. 微軟擴展官網 微軟擴展官網:—>Visual Studio Marketplace 2. 待安裝的擴展包 | 序號 | 擴展包(vsix包) | 官方說明 | | | | | | 1 | ClaudiaIDE | 此擴展更改編輯器的背景圖像 | | 2 | Visual Studio Colo ...
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上(五十八)
承接上文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,不過,這隻是第一步,在後續測試中,應該還會有一些問題。