asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作(asp.net,ef,webapi,开发技术)

时间:2024-05-02 15:58:00 作者 : 石家庄SEO 分类 : 开发技术
  • TAG :

一、资料准备

数据库脚本:

createtableDept--部门信息( DeptIdintprimarykeyidentity(1,1), DeptNamevarchar(50)notnull)createtableEmployee --员工信息( EmpIdintprimarykeyidentity(1,1), DeptIdintnotnull, EmpNamevarchar(50)notnull, EmpPhonevarchar(50)notnull, EmpAreavarchar(50)notnull, EmpSalarydecimal(18,2)notnull)insertintoDept(DeptName)values('开发部')insertintoDept(DeptName)values('测试部')insertintoDept(DeptName)values('实施部')insertintoEmployee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(1,'刘德华','13887855552','武汉',6500)insertintoEmployee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(2,'张学友','13556528634','深圳',6500)insertintoEmployee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(3,'刘亦菲','13448494546','广州',6500)insertintoEmployee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(1,'周杰伦','13888666855','北京',6500)insertintoEmployee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(2,'许巍','13868654219','上海',6500)insertintoEmployee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(3,'孙燕姿','13895133572','成都',6500)insertintoEmployee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(1,'朴树','13458788896','武汉',6500)insertintoEmployee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(2,'周润发','13554588745','南京',6500)insertintoEmployee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary)values(3,'李连杰','13998759654','上海',6500)select*fromDept;select*fromEmployee;

二、数据列表

API接口:

[HttpGet]publicIHttpActionResultGet(){vardata=fromempindb.Employeejoindeptindb.Deptonemp.DeptIdequalsdept.DeptIdselectnew{EmpId=emp.EmpId,DeptId=emp.DeptId,EmpName=emp.EmpName,EmpPhone=emp.EmpPhone,EmpArea=emp.EmpArea,EmpSalary=emp.EmpSalary,DeptName=dept.DeptName};returnJson(new{res=1,msg="",data=data});}

接口测试地址:

http://localhost:1894/api/Employee

三、组合条件搜索

接受搜索条件的实体:

publicclassSearchDto{ publicintDeptId{get;set;}//部门编号 publicstringEmpName{get;set;}//部门名称}

API接口:

[HttpGet][Route("api/Employee/Search")]publicIHttpActionResultGet([FromUri]SearchDtosearchDto){vardata=fromempindb.Employeejoindeptindb.Deptonemp.DeptIdequalsdept.DeptIdselectnew{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));returnJson(new{res=1,msg="",data=data});}

接口测试:

asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作

四、组合条件搜索加分页

接受搜索条件的实体:

publicclassSearchDto{ publicintDeptId{get;set;}//部门编号 publicstringEmpName{get;set;}//部门名称}

API接口:

[HttpGet][Route("api/Employee/SearchPage")]publicIHttpActionResultGet(intpage,intpagesize,[FromUri]SearchDtosearchDto){varquery=fromempindb.Employeejoindeptindb.Deptonemp.DeptIdequalsdept.DeptIdselectnew{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));vardata=query.OrderByDescending(p=>p.EmpId).ToPagedList(page,pagesize);returnJson(new{res=1,msg="",total=data.TotalItemCount,data=data});}

接口测试:

asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作

五、数据的新增

API接口方案一:(直接使用EF中实体接受新增的数据)

[HttpPost]//此处为降低前端和EF框架实体的耦合性,也可以重新定义Dto类,然后将Dto数据通过映射,赋值到EF中Employee对象中publicIHttpActionResultAdd(Employeeemp){db.Employee.Add(emp);intr=db.SaveChanges();if(r==1)returnJson(new{res=1,msg="添加成功"});elsereturnJson(new{res=1,msg="添加失败"});}

API接口方案二:(使用Dto接受数据,直接通过属性赋值实现Dto对象向EF实体的转换)

publicclassEmpAddDto{publicintEmpId{get;set;}publicintDeptId{get;set;}publicstringEmpName{get;set;}publicstringEmpPhone{get;set;}publicstringEmpArea{get;set;}publicdecimalEmpSalary{get;set;}}[HttpPost]publicIHttpActionResultAdd(EmpAddDtodto){//属性依次赋值实现Dto对象向EF实体对象的转换Employeeemp=newEmployee();emp.DeptId=dto.DeptId;emp.EmpName=dto.EmpName;emp.EmpPhone=dto.EmpPhone;emp.EmpArea=dto.EmpArea;emp.EmpSalary=dto.EmpSalary;db.Employee.Add(emp);intr=db.SaveChanges();if(r==1)returnJson(new{res=1,msg="添加成功"});elsereturnJson(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接口代码:(两种类型属性名称完全相同的时候)

publicclassEmpAddDto{publicintEmpId{get;set;}publicintDeptId{get;set;}publicstringEmpName{get;set;}publicstringEmpPhone{get;set;}publicstringEmpArea{get;set;}publicdecimalEmpSalary{get;set;}}[HttpPost]publicIHttpActionResultAdd(EmpAddDtodto){//两种类型属性名称相同自动映射varconfig=newMapperConfiguration(cfg=>cfg.CreateMap<EmpAddDto,Employee>());varmapper=config.CreateMapper();Employeeemp=mapper.Map<Employee>(dto);db.Employee.Add(emp);intr=db.SaveChanges();if(r==1)returnJson(new{res=1,msg="添加成功"});elsereturnJson(new{res=1,msg="添加失败"});}

API接口代码:(两种类型属性名称不一致的时候)

publicclassEmpAddDto{publicintEmpId{get;set;}publicintDeptId{get;set;}publicstringName{get;set;}publicstringPhone{get;set;}publicstringEmpArea{get;set;}publicdecimalEmpSalary{get;set;}}[HttpPost]publicIHttpActionResultAdd(EmpAddDtodto){//两种类型名属性相同自动映射varconfig=newMapperConfiguration(cfg=>{cfg.CreateMap<EmpAddDto,Employee>().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));});varmapper=config.CreateMapper();Employeeemp=mapper.Map<Employee>(dto);db.Employee.Add(emp);intr=db.SaveChanges();if(r==1)returnJson(new{res=1,msg="添加成功"});elsereturnJson(new{res=1,msg="添加失败"});}

接口测试:(使用EmpAddDto接受数据的时候注意参数名称需要和EmpAddDto的属性名相同)

asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作

 </div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
本文:asp.net怎么使用WebAPI和EF框架结合实现数据的基本操作的详细内容,希望对您有所帮助,信息来源于网络。
上一篇:Java8中Stream的使用方式是什么下一篇:

6 人围观 / 0 条评论 ↓快速评论↓

(必须)

(必须,保密)

阿狸1 阿狸2 阿狸3 阿狸4 阿狸5 阿狸6 阿狸7 阿狸8 阿狸9 阿狸10 阿狸11 阿狸12 阿狸13 阿狸14 阿狸15 阿狸16 阿狸17 阿狸18