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

WPF实战项目十二(API篇):配置AutoMapper

1、新建类库WPFProjectShared,在类库下新建文件夹Dtos,新建BaseDto.cs,继承INotifyPropertyChanged,实现通知更新。

public class BaseDto : INotifyPropertyChanged{public int Id { get; set; }public event PropertyChangedEventHandler? PropertyChanged;/// <summary>/// 实现通知更新/// </summary>/// <param name="propertyName"></param>public void OnPropertyChanged([CallerMemberName] string propertyName = ""){PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));}}

 2、WPFProjectAPI添加引用WPFProjectShared

 3、新建待办事项传输实体TodoDto.cs,继承BaseDto.cs

/// <summary>/// 待办事项传输实体/// </summary>public class TodoDto : BaseDto{/// <summary>/// 标题/// </summary>private string title;public string Title{get { return title; }set { title = value; OnPropertyChanged(); }}/// <summary>/// 内容/// </summary>private string content;public string Content{get { return content; }set { content = value; OnPropertyChanged(); }}/// <summary>/// 状态/// </summary>private string status;public string Status{get { return status; }set { status = value; OnPropertyChanged(); }}}

4、在api层引入AutoMapper,并新建文件夹Extensions,新建帮助类AutoMapperProFile.cs,继承ProFile

 

    public class AutoMapperProFile : Profile{public AutoMapperProFile(){CreateMap<ToDo, TodoDto>().ReverseMap();}}

5、在program.cs中注册AutoMapper的服务

//注册AutoMapper服务
builder.Services.AddAutoMapper(typeof(AutoMapperProFile));

 6、IToDoService.cs修改代码传入ToDoDto,相应的ToDoService.cs的代码也要修改

    public interface IToDoService : IBaseService<TodoDto>{}
public class ToDoService : IToDoService{private readonly IUnitOfWork unitOfWork;private readonly IMapper mapper;public ToDoService(IUnitOfWork unitOfWork, IMapper mapper){this.unitOfWork = unitOfWork;this.mapper = mapper;}/// <summary>/// 新增待办事项/// </summary>/// <param name="model"></param>/// <returns></returns>public async Task<ApiResponse> AddEntityAsync(TodoDto model){try{var todo = mapper.Map<ToDo>(model);await unitOfWork.GetRepository<ToDo>().InsertAsync(todo);if(await unitOfWork.SaveChangesAsync() > 0){return new ApiResponse(true, model);}else{return new ApiResponse(false, "添加数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 删除待办事项/// </summary>/// <param name="id"></param>/// <returns></returns>public async Task<ApiResponse> DeleteEntityAsync(int id){try{var repository = unitOfWork.GetRepository<ToDo>();var todo = await repository.GetFirstOrDefaultAsync(predicate: t => t.Id.Equals(id));repository.Delete(todo);if (await unitOfWork.SaveChangesAsync() > 0){return new ApiResponse(true, "删除数据成功!");}else{return new ApiResponse(false, "删除数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 查询所有数据/// </summary>/// <returns></returns>public async Task<ApiResponse> GetAllAsync(){try{var repository = unitOfWork.GetRepository<ToDo>();var todo = await repository.GetAllAsync();if (todo != null){return new ApiResponse(true, todo);}else{return new ApiResponse(false, "查询数据失败!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 根据Id查询数据/// </summary>/// <param name="id"></param>/// <returns></returns>public async Task<ApiResponse> GetSingleAsync(int id){try{var repository = unitOfWork.GetRepository<ToDo>();var todo = await repository.GetFirstOrDefaultAsync(predicate: t => t.Id.Equals(id));if (todo != null){return new ApiResponse(true, todo);}else{return new ApiResponse(false, $"未查询到Id={id}的数据!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}/// <summary>/// 更新数据/// </summary>/// <param name="model"></param>/// <returns></returns>/// <exception cref="NotImplementedException"></exception>public async Task<ApiResponse> UpdateEntityAsync(TodoDto model){try{var dbTodo = mapper.Map<ToDo>(model);var repository = unitOfWork.GetRepository<ToDo>();var todo = await repository.GetFirstOrDefaultAsync(predicate: t => t.Id.Equals(dbTodo.Id));if (todo != null){todo.Title = dbTodo.Title;todo.Content = dbTodo.Content;todo.Status = dbTodo.Status;todo.UpdateDate = DateTime.Now;repository.Update(todo);if(await unitOfWork.SaveChangesAsync() > 0){return new ApiResponse(true, "更新数据成功!");}else{return new ApiResponse(true, "更新数据失败!");}}else{return new ApiResponse(false, $"未查询到Id={model.Id}的数据!");}}catch (Exception ex){return new ApiResponse(false, ex.Message);}}}

7、F5运行项目

 

 

相关文章:

WPF实战项目十二(API篇):配置AutoMapper

1、新建类库WPFProjectShared&#xff0c;在类库下新建文件夹Dtos&#xff0c;新建BaseDto.cs&#xff0c;继承INotifyPropertyChanged&#xff0c;实现通知更新。 public class BaseDto : INotifyPropertyChanged{public int Id { get; set; }public event PropertyChangedEv…...

Linux 内核模块加载过程之重定位

文章目录 一、内核模块符号解析1.1 内核模块重定位函数调用1.1.1 struct load_info info1.1.2 copy_module_from_user 1.2 simplify_symbols1.2.1 simplify_symbols1.2.2 resolve_symbol_wait1.2.3 resolve_symbol1.2.4 find_symbol 二、 apply_relocations2.1 apply_relocatio…...

Flink流批一体计算(19):PyFlink DataStream API之State

目录 keyed state Keyed DataStream 使用 Keyed State 实现了一个简单的计数窗口 状态有效期 (TTL) 过期数据的清理 全量快照时进行清理 增量数据清理 在 RocksDB 压缩时清理 Operator State算子状态 Broadcast State广播状态 keyed state Keyed DataStream 使用 k…...

adb shell获取安卓设备电量ROM内存帧率等信息

adb shell获取安卓设备电量ROM内存帧率等信息 adb shell指令获取Android设备的运行状态&#xff0c;如电池信息&#xff08;包含电量百分比&#xff0c;电池状态&#xff0c;电池温度&#xff0c;电池电压&#xff0c;充放电电流&#xff09;&#xff0c;CPU占比&#xff0c;内…...

springboot服务端接口外网远程调试,并实现HTTP服务监听

文章目录 前言1. 本地环境搭建1.1 环境参数1.2 搭建springboot服务项目 2. 内网穿透2.1 安装配置cpolar内网穿透2.1.1 windows系统2.1.2 linux系统 2.2 创建隧道映射本地端口2.3 测试公网地址 3. 固定公网地址3.1 保留一个二级子域名3.2 配置二级子域名3.2 测试使用固定公网地址…...

代码随想录算法训练营之JAVA|第四十二天|70. 爬楼梯

今天是第 天刷leetcode&#xff0c;立个flag&#xff0c;打卡60天&#xff0c;如果做不到&#xff0c;完成一件评论区点赞最高的挑战。 算法挑战链接 70. 爬楼梯https://leetcode.cn/problems/climbing-stairs/ 第一想法 这是一个动态规划的入门题目&#xff0c;在看完完全背…...

【uniapp】 实现公共弹窗的封装以及调用

图例&#xff1a;红框区域为 “ 内容区域 ” 一、组件 <!-- 弹窗组件 --> <template> <view class"add_popup" v-if"person.isShowPopup"><view class"popup_cont" :style"{width:props.width&&props.width&…...

DevOps系列文章之 Python基础

列表 Python中的列表类似于C语言中的数组的概念&#xff0c;列表由内部的元素组成&#xff0c;元素可以是任何对象 Python中的列表是可变的 简单的理解就是&#xff1a;被初始化的列表&#xff0c;可以通过列表的API接口对列表的元素进行增删改查 1、定义列表 1.可以将列表当成…...

代码随想录第五十天

代码随想录第五十天 Leetcode 123. 买卖股票的最佳时机 IIILeetcode 188. 买卖股票的最佳时机 IV Leetcode 123. 买卖股票的最佳时机 III 题目链接: 买卖股票的最佳时机 III 自己的思路:想不到&#xff01;&#xff01;&#xff01;&#xff01;高维dp数组&#xff01;&#x…...

redis缓存雪崩、穿透、击穿解决方案

redis缓存雪崩、穿透、击穿解决方案 背景缓存雪崩缓存击穿缓存穿透总结背景 关于缓存异常,我们常见的有三个问题:缓存雪崩、缓存击穿、缓存穿透。这三个问题一旦发生,会导致大量请求直接落到数据库层面。如果请求的并发量很大,会影响数据库的运行,严重的会导致数据库宕机…...

基于HarmonyOS ArkUI实现七夕壁纸轮播

七夕情人节&#xff0c;为了Ta&#xff0c;你打算用什么方式表达爱&#xff1f;是包包、鲜花、美酒、巧克力&#xff0c;还是一封充满爱意的短信&#xff1f;作为程序员&#xff0c;以代码之名&#xff0c;表达爱。本节将演示如何在基于HarmonyOS ArkUI的SwiperController、Ima…...

FusionAD:用于自动驾驶预测和规划任务的多模态融合

论文背景 自动驾驶&#xff08;AD&#xff09;任务通常分为感知、预测和规划。在传统范式中&#xff0c;AD中的每个学习模块分别使用自己的主干&#xff0c;独立地学习任务。 以前&#xff0c;基于端到端学习的方法通常基于透视视图相机和激光雷达信息直接输出控制命令或轨迹…...

C# 序列化json数据,datatabel转对象

datatabel直接转对象 转对象逻辑 1.将datatabel转为json格式 2.将json格式的内容转化为模型data_model的list对象 JsonConvert.DeserializeObject<List<data_model>>(JsonConvert.SerializeObject(dt))...

axios引入的详细讲解

1.安装axios&#xff1a;npm install axios&#xff0c;等待安装完毕即可 2.引用axios&#xff1a;在需要使用的页面中引用 import axios from axios 即可 axios请求的时候有两种方式&#xff1a;一种是get请求&#xff0c;另一种是post请求 get请求&#xff1a; axios({…...

16- flask-bootstrap模板的使用

Flask 中支持 flask-bootstrap模板 和 bootstrap-flask模板 # 不使用: bootstrap-flask # pip install bootstrap-flask1.3.1 # 支持bootstrap 4 # pip install flask-bootstrap # 支持bootstrap3# 中文文档:https://flask-bootstrap-zh.readthedocs.io/zh/latest/ # 样式文档…...

机器学习-神经网络(西瓜书)

神经网络 5.1 神经元模型 在生物神经网络中&#xff0c;神经元之间相互连接&#xff0c;当一个神经元受到的外界刺激足够大时&#xff0c;就会产生兴奋&#xff08;称为"激活"&#xff09;&#xff0c;并将剩余的"刺激"向相邻的神经元传导。 神经元模型…...

Apache StreamPark系列教程第二篇——项目打包和开发

一、项目打包 项目依赖maven、jdk8.0、前端(node、npm) //下载代码 git clone//maven打包相关内容 mvn -N io.takari:maven:wrapper //前端打包相关内容 curl -sL https://rpm.nodesource.com/setup_16.x | bash - yum -y install nodejs npm -v npm install -g pnpm默认是h2…...

Visual Studio 2022的MFC框架——WinMain函数

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天我们来重新审视一下Visual Studio 2022下开发工具的MFC框架知识。 大家还记得创建Win32应用程序是怎么弄的吗&#xff1f; Win32应用程序的建立到运行是有一个个关系分明的步骤的&#xff1a; 1.进入W…...

9. 解谜游戏

目录 题目 Description Input Notes 思路 暴力方法 递归法 注意事项 C代码&#xff08;递归法&#xff09; 关于DFS 题目 Description 小张是一个密室逃脱爱好者&#xff0c;在密室逃脱的游戏中&#xff0c;你需要解开一系列谜题最终拿到出门的密码。现在小张需要打…...

fastjson利用templatesImpl链

fastjson1.2.24 环境&#xff1a; pom.xml&#xff1a; <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLoc…...

如何7天免费使用Cursor Pro:无限制AI编程助手完整指南

如何7天免费使用Cursor Pro&#xff1a;无限制AI编程助手完整指南 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your tri…...

AI时代开发格局剧变:TypeScript在AI辅助开发中超越Python,登顶GitHub榜首

2026年3月&#xff0c;GitHub《Octoverse 2025》报告数据在技术圈彻底引爆——TypeScript首次超越Python&#xff0c;成为GitHub月活跃贡献者最多的编程语言&#xff0c;而这一历史性转折的核心推手&#xff0c;正是AI辅助开发的全面普及。这不是简单的语言热度更迭&#xff0c…...

手机号逆向查询QQ号:3步快速找回QQ号的终极免费方案

手机号逆向查询QQ号&#xff1a;3步快速找回QQ号的终极免费方案 【免费下载链接】phone2qq 项目地址: https://gitcode.com/gh_mirrors/ph/phone2qq 你是否曾因忘记QQ号而无法登录重要账号&#xff1f;手机号逆向查询QQ号工具为你提供了一种简单高效的解决方案。这个基…...

避开这些坑!用MATLAB做QPSK调制解调仿真时,你的成形滤波和匹配滤波设置对了吗?

QPSK仿真中的成形滤波与匹配滤波陷阱&#xff1a;MATLAB实战避坑指南 在数字通信系统的设计与验证过程中&#xff0c;MATLAB仿真扮演着至关重要的角色。许多工程师和研究人员在QPSK调制解调仿真中&#xff0c;常常遇到性能不达预期或结果与理论不符的情况。本文将深入剖析成形滤…...

Ollama GUI架构解析:现代本地LLM交互界面的技术实现与隐私优先设计

Ollama GUI架构解析&#xff1a;现代本地LLM交互界面的技术实现与隐私优先设计 【免费下载链接】ollama-gui 项目地址: https://gitcode.com/gh_mirrors/ol/ollama-gui 在人工智能技术快速发展的今天&#xff0c;本地化部署的大语言模型&#xff08;LLM&#xff09;成为…...

如何高效捕获网页媒体资源?猫抓插件让智能嗅探变得如此简单

如何高效捕获网页媒体资源&#xff1f;猫抓插件让智能嗅探变得如此简单 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 你是否遇到过想保存网页上的精彩视频却找不到下载按钮的尴尬&#xff1f;是否曾…...

Unity序列化为何拒绝多态

一个让无数开发者抓狂的"bug",其实是一个深思熟虑的设计决策 一、开篇:一个周五下午的惨案 故事从一个看似完美的设计开始。 你正在开发一个RPG游戏的技能系统。你学过面向对象,你知道继承和多态是好东西。于是你写出了这样优雅的代码: [System.Serializable]…...

手把手教你用FreeRTOS创建第一个任务:从栈初始化到SVC调用的完整流程

深入解析FreeRTOS任务启动机制&#xff1a;从栈初始化到任务切换的实战指南 在嵌入式开发领域&#xff0c;实时操作系统(RTOS)已成为复杂项目的标配工具。作为开源RTOS中的佼佼者&#xff0c;FreeRTOS凭借其轻量级、可移植性强等特点&#xff0c;在STM32等Cortex-M系列MCU上广…...

LiuJuan20260223Zimage操作系统概念学习与实验环境

LiuJuan20260223Zimage&#xff1a;你的随身操作系统学习与实验环境 操作系统&#xff0c;听起来是不是有点高深莫测&#xff1f;内核、进程、内存、文件系统……这些概念在课本上总是显得抽象又遥远。很多朋友学操作系统原理时都有这样的困惑&#xff1a;理论都懂&#xff0c…...

【全场景优化】WaveTools鸣潮性能调校指南:从卡顿到流畅的完整解决方案

【全场景优化】WaveTools鸣潮性能调校指南&#xff1a;从卡顿到流畅的完整解决方案 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 问题定位&#xff1a;硬件与软件的兼容性挑战 当代游戏性能优化面临的核…...