asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作
发表于:2025-11-09 作者:千家信息网编辑
千家信息网最后更新 2025年11月09日,这篇文章主要介绍"asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"asp.net怎么使用Web
千家信息网最后更新 2025年11月09日asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作
这篇文章主要介绍"asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作"文章能帮助大家解决问题。
一、资料准备
数据库脚本:
create table Dept --部门信息( DeptId int primary key identity(1,1), DeptName varchar(50) not null)create table Employee --员工信息( EmpId int primary key identity(1,1), DeptId int not null, EmpName varchar(50) not null, EmpPhone varchar(50) not null, EmpArea varchar(50) not null, EmpSalary decimal(18,2) not null)insert into Dept(DeptName) values('开发部')insert into Dept(DeptName) values('测试部')insert into Dept(DeptName) values('实施部')insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(1,'刘德华','13887855552','武汉',6500)insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(2,'张学友','13556528634','深圳',6500)insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(3,'刘亦菲','13448494546','广州',6500)insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(1,'周杰伦','13888666855','北京',6500)insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(2,'许巍','13868654219','上海',6500)insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(3,'孙燕姿','13895133572','成都',6500)insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(1,'朴树','13458788896','武汉',6500)insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(2,'周润发','13554588745','南京',6500)insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(3,'李连杰','13998759654','上海',6500)select * from Dept;select * from Employee;二、数据列表
API接口:
[HttpGet]public IHttpActionResult Get(){ var data = from emp in db.Employee join dept in db.Dept on emp.DeptId equals dept.DeptId select new { EmpId = emp.EmpId, DeptId = emp.DeptId, EmpName = emp.EmpName, EmpPhone = emp.EmpPhone, EmpArea = emp.EmpArea, EmpSalary = emp.EmpSalary, DeptName = dept.DeptName }; return Json(new { res = 1, msg = "", data = data });}接口测试地址:
http://localhost:1894/api/Employee
三、组合条件搜索
接受搜索条件的实体:
public class SearchDto{ public int DeptId { get; set; } //部门编号 public string EmpName { get; set; } //部门名称}API接口:
[HttpGet][Route("api/Employee/Search")]public IHttpActionResult Get([FromUri] SearchDto searchDto){ var data = from emp in db.Employee join dept in db.Dept on emp.DeptId equals dept.DeptId select new { EmpId = emp.EmpId, DeptId = emp.DeptId, EmpName = emp.EmpName, EmpPhone = emp.EmpPhone, EmpArea = emp.EmpArea, EmpSalary = emp.EmpSalary, DeptName = dept.DeptName }; if (searchDto.DeptId > 0) data = data.Where(p => p.DeptId == searchDto.DeptId); if (!string.IsNullOrEmpty(searchDto.EmpName)) data = data.Where(p => p.EmpName.Contains(searchDto.EmpName)); return Json(new { res = 1, msg = "", data = data });}接口测试:
四、组合条件搜索加分页
接受搜索条件的实体:
public class SearchDto{ public int DeptId { get; set; } //部门编号 public string EmpName { get; set; } //部门名称}API接口:
[HttpGet][Route("api/Employee/SearchPage")]public IHttpActionResult Get(int page,int pagesize,[FromUri] SearchDto searchDto){ var query = from emp in db.Employee join dept in db.Dept on emp.DeptId equals dept.DeptId select new { EmpId = emp.EmpId, DeptId = emp.DeptId, EmpName = emp.EmpName, EmpPhone = emp.EmpPhone, EmpArea = emp.EmpArea, EmpSalary = emp.EmpSalary, DeptName = dept.DeptName }; if (searchDto.DeptId > 0) query = query.Where(p => p.DeptId == searchDto.DeptId); if (!string.IsNullOrEmpty(searchDto.EmpName)) query = query.Where(p => p.EmpName.Contains(searchDto.EmpName)); var data = query.OrderByDescending(p => p.EmpId).ToPagedList(page, pagesize); return Json(new { res = 1, msg = "",total=data.TotalItemCount, data = data });}接口测试:
五、数据的新增
API接口方案一:(直接使用EF中实体接受新增的数据)
[HttpPost]//此处为降低前端和EF框架实体的耦合性,也可以重新定义Dto类,然后将Dto数据通过映射,赋值到EF中Employee对象中public IHttpActionResult Add(Employee emp) { db.Employee.Add(emp); int r = db.SaveChanges(); if (r == 1) return Json(new { res = 1, msg = "添加成功" }); else return Json(new { res = 1, msg = "添加失败" });}API接口方案二:(使用Dto接受数据,直接通过属性赋值实现Dto对象向EF实体的转换)
public class EmpAddDto{ public int EmpId { get; set; } public int DeptId { get; set; } public string EmpName { get; set; } public string EmpPhone { get; set; } public string EmpArea { get; set; } public decimal EmpSalary { get; set; }}[HttpPost]public IHttpActionResult Add(EmpAddDto dto){ //属性依次赋值实现Dto对象向EF实体对象的转换 Employee emp = new Employee(); emp.DeptId = dto.DeptId; emp.EmpName = dto.EmpName; emp.EmpPhone = dto.EmpPhone; emp.EmpArea = dto.EmpArea; emp.EmpSalary = dto.EmpSalary; db.Employee.Add(emp); int r = db.SaveChanges(); if (r == 1) return Json(new { res = 1, msg = "添加成功" }); else return Json(new { res = 1, msg = "添加失败" });}API接口方案三:(通过AutoMapper组件进行映射)
AutoMapper组件可以在NuGet中进行安装,经过测试在framework4.5中无法使用,在framework4.7.1中可以正常使用。
如果没有安装framework4.7.1,可以在官网下载 .NET Framework 4.7.1 Developer Pack。
如果通过项目的属性面板中修改了目标框架为framework4.7.1,程序可能会编译错误,需要修改配置文件:
compilerOptions="/langversion:6 /nowarn:1659;1699;1701"
修改成:
compilerOptions="/langversion:Default /nowarn:1659;1699;1701"
API接口代码:(两种类型属性名称完全相同的时候)
public class EmpAddDto{ public int EmpId { get; set; } public int DeptId { get; set; } public string EmpName { get; set; } public string EmpPhone { get; set; } public string EmpArea { get; set; } public decimal EmpSalary { get; set; }}[HttpPost]public IHttpActionResult Add(EmpAddDto dto){ //两种类型属性名称相同自动映射 var config = new MapperConfiguration(cfg => cfg.CreateMap()); var mapper = config.CreateMapper(); Employee emp = mapper.Map(dto); db.Employee.Add(emp); int r = db.SaveChanges(); if (r == 1) return Json(new { res = 1, msg = "添加成功" }); else return Json(new { res = 1, msg = "添加失败" });} API接口代码:(两种类型属性名称不一致的时候)
public class EmpAddDto{ public int EmpId { get; set; } public int DeptId { get; set; } public string Name { get; set; } public string Phone { get; set; } public string EmpArea { get; set; } public decimal EmpSalary { get; set; }}[HttpPost]public IHttpActionResult Add(EmpAddDto dto){ //两种类型名属性相同自动映射 var config = new MapperConfiguration(cfg => { cfg.CreateMap() .ForMember("EmpName", opt => opt.MapFrom(src => src.Name)) .ForMember(dest => dest.EmpPhone, opt => opt.MapFrom(src => src.Phone)); //.ForMember(dest => dest.EmpId, opt => opt.MapFrom(src => src.EmpId)) //.ForMember(dest => dest.DeptId, opt => opt.MapFrom(src => src.DeptId)) //.ForMember(dest => dest.EmpName, opt => opt.MapFrom(src => src.Name)) //.ForMember(dest => dest.EmpPhone, opt => opt.MapFrom(src => src.Phone)) //.ForMember(dest => dest.EmpArea, opt => opt.MapFrom(src => src.EmpArea)) //.ForMember(dest => dest.EmpSalary, opt => opt.MapFrom(src => src.EmpSalary)); }); var mapper = config.CreateMapper(); Employee emp = mapper.Map(dto); db.Employee.Add(emp); int r = db.SaveChanges(); if (r == 1) return Json(new { res = 1, msg = "添加成功" }); else return Json(new { res = 1, msg = "添加失败" });} 接口测试:(使用EmpAddDto接受数据的时候注意参数名称需要和EmpAddDto的属性名相同)
关于"asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注行业资讯频道,小编每天都会为大家更新不同的知识点。
接口
数据
属性
名称
实体
测试
框架
部门
相同
成功
对象
条件
类型
搜索
基本操作
方案
时候
知识
代码
信息
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
在cmd中连接数据库的命令行是
大型数据库技术第三章测试
科东网络安全监测装置连网线
网络安全电子版图片
服务器盘点记录表
数据库同步系统是什么软件
vpn的服务器填加速软件
数据库表连接查询
linux系统服务器
天津服务器虚拟化系统物理机
网络安全脆弱性体现
qq邮箱的接受服务器
东海口碑好的网络技术专业服务
幼儿园网络安全宣传周新闻
金山区项目软件开发哪家好
国泰安数据库如何查贝塔值
游戏类的软件开发论文
solr 添加数据库
一个人能搞软件开发吗
直播平台服务器要求
知名软件开发商
聊天消息数据库设计
南大数据库gbase
网络安全有关的街头采访问题
最新雅乐经典视频数据库试用通知
商业地产 互联网科技
磁盘和服务器区别
网络安全行政处罚措施
济南市白菜网络技术有限公司
数据库安全 拼接字符串