ABP框架的完整操作流程

今天距離農曆2020年春節還有5天,這應該也是我這一年技術博客的最後一篇封箱之作了哈哈,其實兩個月以前就有打算寫一下ABP框架的完成操作流程。可惜當時理解實在是太皮毛(現在也沒有好到哪裏去…),但是時至今日,我不得不在春節前把它完整的詳細的記錄下來,因爲我怕春節後我就忘了怎麼操作的(哈哈)。趁熱打鐵火速上手!

第一步
需要在 Core 中新建一個實體類
寫入所需要的實體類並右鍵使用代碼生成器生成一下
第二步
需要在DBContext文件中添加

public DbSet<***>  *****{ get; set; }

第三步
配置Automapper :

複製以下代碼到Application層下的:adminCoreApplicationModule.cs
中的 PreInitialize 方法中:

// 自定義類型映射
// 如果沒有這一段就把這一段複製上去
Configuration.Modules.AbpAutoMapper().Configurators.Add(configuration =>
{
    // ....

    // 只需要複製這一段
***Mapper.CreateMappings(configuration);

    // ....
});

一對多的關係映射
需要在cfg文件中添加一對多映射

 builder.HasMany(c => c.).WithOne(c => c.).HasForeignKey(c => c.外鍵).OnDelete(DeleteBehavior.NoAction);

這裏一定要注意在我們進行一對多映射後,一定要在“多”中的實體類同樣添加“一”的映射。
第四步
在程序包管理器控制檯輸入

PM>  Add-Migration 20200120****

回車,成功後進行

PM> Update-Database

都成功後即可在生成的Application中進行接口的編寫。
OK,Vans
追加多對多關係
1.新建一個Map實體類。右鍵生成(不需要生成應用服務層)
2.在每個實體類中添加ICollection對應的MAP實體類
2.在生成的cfg文件中

builder.HasOne(a => a.).WithMany(a => a.).HasForeignKey(a => a.外鍵).OnDelete(DeleteBehavior.Cascade);

3.在Mapper文件中寫入多對多寫入關係映射

       configuration.CreateMap< aEditDto, a>()
                .AfterMap((src, dest) =>
                {
                    //多對多寫入映射

                    if (src.b!= null)
                    {
                        foreach (var ab in src.b)
                        {
                            if (dest.abMaps.Where(c => c.b!= null && c.b.Id == ab.Id).FirstOrDefault() == null)
                            {
                                var abMap = new abMap { aId = dest.Id, bId = ab.Id };
                                dest.abMaps.Add(abMap);
                            }
                        }
                    }

4.隨後同樣文件中寫入多對多讀取映射

       configuration.CreateMap <a,aEditDto>()
                 .BeforeMap((src, dest) =>
                 {
                     //對對多讀取映射                                              
                     List<bListDto> bListDtos  = new List<CityListDto>();
                     if (src.abMaps != null)
                     {
                         foreach (abMap abMap in src.abMaps)
                             bListDtos.Add(abMap.b.MapTo<bListDto>());
                     }

                     dest.b = bListDtos;

 
                 })
                .ForMember(dest => dest.abMaps, opt => opt.Ignore()) 

5.最後在Application中update

var entity = await _entityRepository.GetAllIncluding(c => c.abMaps ).SingleOrDefaultAsync(c => c.Id == input.Id); 

ps.希望春節過後的我,能夠再接再厲,不要丟了寫博客的習慣。這不是一個技術炫耀,我覺得更多的對於我來說一個技術積累的過程,大大小小的技術知識點,隨筆、心得、在我一時想不起的時候,我都可以翻開我的博客回頭看看,我覺得這是最大的收穫。新的一年,希望繼續加油!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章