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