当前位置: 首页 > wzjs >正文

重庆网上制作网站重庆技术网站建设

重庆网上制作网站,重庆技术网站建设,制作公司内部网站,wordpress博客翻译文章目录 项目地址一、给Habit添加Tags1.1 创建Tags1. 创建一个新的HabitTags实体2. 设置Habit和Tags的关系3. 设置HabitTag表4. 在HabitConfiguration里配置5. 将表添加到EFCore里6. 迁移数据 1.2 给Habit增加/修改标签1. 创建UpsertHabitTagsDto2. 创建查询HabitWithTagsDto3…

文章目录

  • 项目地址
  • 一、给Habit添加Tags
    • 1.1 创建Tags
      • 1. 创建一个新的HabitTags实体
      • 2. 设置Habit和Tags的关系
      • 3. 设置HabitTag表
      • 4. 在HabitConfiguration里配置
      • 5. 将表添加到EFCore里
      • 6. 迁移数据
    • 1.2 给Habit增加/修改标签
      • 1. 创建UpsertHabitTagsDto
      • 2. 创建查询HabitWithTagsDto
      • 3. 创建HabitTagsController
    • 1.3 使用Fluent API验证Create tag逻辑


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、给Habit添加Tags

1.1 创建Tags

1. 创建一个新的HabitTags实体

  • 该实体需要创建一个表,关联Habits和Tags
namespace DevHabit.Api.Entities;public sealed class HabitTag
{public string HabitId { get; set; }public string TagId { get; set; }public DateTime CreatedAtUtc { get; set; }
}

2. 设置Habit和Tags的关系

  • 在Habit 的是实体里创建关系

在这里插入图片描述

3. 设置HabitTag表

  • 添加HabitTagConfiguration.cs 配置文件

在这里插入图片描述
注意:这里Tag的WithMany()是空的原因是,暂时我们业务上不考虑通过Tag来找所有的Habits; 但是,Habit里面,我们建立了多对多关系,需要通过habit来找到所有的Tag

4. 在HabitConfiguration里配置

  • 修改了Habit的实体,我们需要在HabitConfiguration里配置关系

在这里插入图片描述

5. 将表添加到EFCore里

  • ApplicationDbContext.cs 里,添加新的表

public sealed class ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : DbContext(options)
{public DbSet<Habit> Habits { get; set; }public DbSet<Tag> Tags { get; set; }public DbSet<HabitTag> HabitTags { get; set; }protected override void OnModelCreating(ModelBuilder modelBuilder){modelBuilder.HasDefaultSchema(Schemas.Application);modelBuilder.ApplyConfigurationsFromAssembly(typeof(ApplicationDbContext).Assembly);}
}

6. 迁移数据

  1. 在Api的Console里先输入add-migration add HabitTag
  2. 换到docker环境,运行程序,自动执行

1.2 给Habit增加/修改标签

1. 创建UpsertHabitTagsDto

  • 创建UpsertHabitTagsDto,用于处理前端传来的api数据
namespace DevHabit.Api.DTOs.HabitTags;public sealed record UpsertHabitTagsDto
{public required List<string> TagIds { get; init; }
}

2. 创建查询HabitWithTagsDto

  • 用于查询单个habit后,显示该habit里的Tags

public sealed record HabitWithTagsDto
{public required string Id { get; init; }public required string Name { get; init; }public string? Description { get; init; }public required HabitType Type { get; init; }public required FrequencyDto Frequency { get; init; }public required TargetDto Target { get; init; }public required HabitStatus Status { get; init; }public required bool IsArchived { get; init; }public DateOnly? EndDate { get; init; }public MilestoneDto? Milestone { get; init; }public required DateTime CreatedAtUtc { get; init; }public DateTime? UpdatedAtUtc { get; init; }public DateTime? LastCompletedAtUtc { get; init; }public required string[] Tags { get; init; }
}

3. 创建HabitTagsController

  • 该Controller用于给Habit 处理标签
    [HttpPut]public async Task<ActionResult> UpsertHabitTags(string habitId, UpsertHabitTagsDto upsertHabitTagsDto){Habit? habit = await dbContext.Habits.Include(h => h.HabitTags).FirstOrDefaultAsync(h => h.Id == habitId);if (habit is null){return NotFound();}var currentTagIds = habit.HabitTags.Select(ht => ht.TagId).ToHashSet();if (currentTagIds.SetEquals(upsertHabitTagsDto.TagIds)){return NoContent();}List<string> existingTagIds = await dbContext.Tags.Where(t => upsertHabitTagsDto.TagIds.Contains(t.Id)).Select(t => t.Id).ToListAsync();if (existingTagIds.Count != upsertHabitTagsDto.TagIds.Count){return BadRequest("One or more tag IDs is invalid");}habit.HabitTags.RemoveAll(ht => !upsertHabitTagsDto.TagIds.Contains(ht.TagId));string[] tagIdsToAdd = upsertHabitTagsDto.TagIds.Except(currentTagIds).ToArray();habit.HabitTags.AddRange(tagIdsToAdd.Select(tagId => new HabitTag{HabitId = habitId,TagId = tagId,CreatedAtUtc = DateTime.UtcNow}));await dbContext.SaveChangesAsync();return NoContent();}

代码解释:

  1. 发起http://localhost:5000/habits/h_0195e900-3c05-7ee6-8b26-7ec6b367d66a/tags请求
  2. 接收一个habitId以及 UpsertHabitTagsDto
    在这里插入图片描述
  3. 根据Id从数据库查询该habit的数据
    在这里插入图片描述
  4. 查看是否有新增或者取消:通过数据库tags所有Id的hashSet和前端传来的进行对比,如果没有变化,则返回204

在这里插入图片描述
5. 排除非法habitId:查询Tags表的tagId和前端传来的Id进行对比,如果有不一样的,则报错

在这里插入图片描述
6. 删除Dto里取出的Tag,保存新增的Tags 完成upsert

在这里插入图片描述
7. 发送请求更改Tag
在这里插入图片描述

1.3 使用Fluent API验证Create tag逻辑

http://www.dtcms.com/wzjs/547876.html

相关文章:

  • 免费企业网站模板psd东营网站设计多少钱
  • 学seo建网站免费pc网站建设
  • 试题wordpress的特点网站改名 seo
  • wordpress 主题函数兰州网站优化seo
  • 怎样做网站推广网站开发确认函
  • 在线做头像的网站手机网站排名怎么做
  • 怎么在百度上做公司网站免费设计软件下载
  • 佛山seo网站推广网站策划方案目标
  • 如何网站托管手机网站免费建设排行
  • 做采集网站的方法做app网站公司名称
  • 广东中山网站建设什么网络游戏比较好玩
  • 杭州网站制作建设php网站代做是什么意思
  • 怎样做网站呢wordpress插件收录
  • 网站开发实训报告金华企业网站建设公司
  • 专做奢侈品品牌的网站甘肃网站建设专家
  • wordpress 汉化模版枫树seo
  • 网站搭建本地环境线上推广计划
  • 关于网站建设的建议征集公司网站开发的工作内容
  • 如何注销网站备案号农产品网站建设策划书范文
  • 商丘市有没有做网站百度收录网站但首页快照不更新
  • 保定市建设施工许可证查询网站柯桥建设局网站首页
  • 最专业的网站建设推广wordpress接入微信登录
  • 企业网站建设需要哪些步骤网站建设的基本步奏
  • 手机网站判断跳转代码怎么搭建个人网站
  • 网站建设什么因素最重要如何做中英文切换的双语网站
  • 盐城企业网站建设长沙网站优化方案
  • 网站建设的经济效益网页设计建站
  • 国外网站排名 top100黑龙江做网站的公司
  • iis 网站启动不了中国城乡住房和建设部网站首页
  • 花都网站建设哪家好网络运营专业的有关大学