asp.net使用WebAPI和EF框架結(jié)合實現(xiàn)數(shù)據(jù)的基本操作
本章節(jié)主要介紹使用WebAPI和EF框架結(jié)合,實現(xiàn)數(shù)據(jù)的基本操作功能。
一、資料準(zhǔn)備
數(shù)據(jù)庫腳本:
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('開發(fā)部') 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,'張學(xué)友','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,'周潤發(fā)','13554588745','南京',6500) insert into Employee(DeptId,EmpName,EmpPhone,EmpArea,EmpSalary) values(3,'李連杰','13998759654','上海',6500) select * from Dept; select * from Employee;
二、數(shù)據(jù)列表
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 }); }
接口測試:
五、數(shù)據(jù)的新增
API接口方案一:(直接使用EF中實體接受新增的數(shù)據(jù))
[HttpPost] //此處為降低前端和EF框架實體的耦合性,也可以重新定義Dto類,然后將Dto數(shù)據(jù)通過映射,賦值到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接受數(shù)據(jù),直接通過屬性賦值實現(xiàn)Dto對象向EF實體的轉(zhuǎn)換)
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) { //屬性依次賦值實現(xiàn)Dto對象向EF實體對象的轉(zhuǎn)換 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組件進(jìn)行映射)
AutoMapper組件可以在NuGet中進(jìn)行安裝,經(jīng)過測試在framework4.5中無法使用,在framework4.7.1中可以正常使用。
如果沒有安裝framework4.7.1,可以在官網(wǎng)下載 .NET Framework 4.7.1 Developer Pack。
如果通過項目的屬性面板中修改了目標(biāo)框架為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<EmpAddDto, Employee>()); var mapper = config.CreateMapper(); Employee emp = mapper.Map<Employee>(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<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)); }); var mapper = config.CreateMapper(); Employee emp = mapper.Map<Employee>(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接受數(shù)據(jù)的時候注意參數(shù)名稱需要和EmpAddDto的屬性名相同)
到此這篇關(guān)于WebAPI和EF框架結(jié)合實現(xiàn)數(shù)據(jù)操作的文章就介紹到這了。希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- EF?Core的CRUD(增刪改查)基本操作
- .NET Core API之格式化輸出對象OutputFormatter
- EF?Core基礎(chǔ)入門教程
- ASP.NET Core使用EF保存數(shù)據(jù)、級聯(lián)刪除和事務(wù)使用
- ASP.NET?Core使用EF查詢數(shù)據(jù)
- ASP.NET?Core使用EF為關(guān)系數(shù)據(jù)庫建模
- ASP.NET?Core使用EF創(chuàng)建關(guān)系模型
- ASP.NET?Core基于現(xiàn)有數(shù)據(jù)庫創(chuàng)建EF模型
- Entity?Framework?Core基于數(shù)據(jù)模型創(chuàng)建數(shù)據(jù)庫
相關(guān)文章
asp.net DataGrid 中文字符排序的實現(xiàn)代碼
在論壇上看到有位朋友希望對中文按拼音進(jìn)行排序,剛好最近有點(diǎn)空,貼一份原來一個同事寫的一個排序類,僅稍微改動了下下,拿出來分享下.2009-09-09MVC4制作網(wǎng)站教程第三章 瀏覽用戶組操作3.1
這篇文章主要為大家詳細(xì)介紹了MVC4制作網(wǎng)站教程,瀏覽用戶組功能的實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-08-08異步調(diào)用webservice返回responseXML為空的問題解決方法
異步調(diào)用webservice返回responseXML為空,詳細(xì)很多朋友都遇到過類似的問題吧,接下來為大家提供詳細(xì)的解決方案,感興趣的朋友可以參考下哈2013-04-04關(guān)于Swagger優(yōu)化的實戰(zhàn)記錄
Swagger是一個規(guī)范和完整的框架,用于生成、描述、調(diào)用和可視化?RESTful風(fēng)格的Web服務(wù),下面這篇文章主要給大家介紹了關(guān)于Swagger優(yōu)化的相關(guān)資料,需要的朋友可以參考下2022-04-04uni-app結(jié)合.NET?7實現(xiàn)微信小程序訂閱消息推送
本文主要介紹了uni-app結(jié)合.NET?7實現(xiàn)微信小程序訂閱消息推送,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02數(shù)據(jù)庫 數(shù)據(jù)類型float到C#類型decimal, float數(shù)據(jù)類型轉(zhuǎn)化無效
數(shù)據(jù)庫 數(shù)據(jù)類型float到C#類型decimal, float數(shù)據(jù)類型轉(zhuǎn)化無效的解決方法2009-07-07