asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要介绍"asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作"的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇"asp.net怎么使用Web
千家信息网最后更新 2025年01月18日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安全错误
数据库的锁怎样保障安全
cn2服务器租用
学科建设项目档案数据库建设研究
二进制与网络安全
加快网络安全产业发展整体布局
计算机网络技术学数据库嘛
美萍系统数据库
澳洲网络安全专业硕士
北京时代网络技术分类咨询报价
怎样开启服务器定位
开封市网络安全知识答题活动开始
数据库建模教程
imap发件服务器
网络安全与防护总结
金融科技应用和网络安全调研
越南访问国内服务器
frm数据库版本
做软件开发适合自考计算机吗
光盘数据库与多媒体的关系
安化棋牌软件开发
vc文件 存数据库
寒地果树资源数据库
网络技术公务员
it行业软件开发先学什么
东营技师学院软件开发
设计互联网软件开发
聊城平台软件开发推荐
南京银行软件开发岗累吗
b站免流卡没数据库
网络安全可以发的期刊
vb软件开发设定闹铃