溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

asp.net怎么使用WebAPI和EF框架結(jié)合實(shí)現(xiàn)數(shù)據(jù)的基本操作

發(fā)布時(shí)間:2022-04-28 13:43:02 來(lái)源:億速云 閱讀:172 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“asp.net怎么使用WebAPI和EF框架結(jié)合實(shí)現(xiàn)數(shù)據(jù)的基本操作”的相關(guān)知識(shí),小編通過(guò)實(shí)際案例向大家展示操作過(guò)程,操作方法簡(jiǎn)單快捷,實(shí)用性強(qiáng),希望這篇“asp.net怎么使用WebAPI和EF框架結(jié)合實(shí)現(xiàn)數(shù)據(jù)的基本操作”文章能幫助大家解決問(wèn)題。

一、資料準(zhǔn)備

數(shù)據(jù)庫(kù)腳本:

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('測(cè)試部')
insert into Dept(DeptName) values('實(shí)施部')

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,'周潤(rùn)發(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 });
}

接口測(cè)試地址:

http://localhost:1894/api/Employee

三、組合條件搜索

接受搜索條件的實(shí)體:

public class SearchDto
{
	public int DeptId { get; set; } //部門編號(hào)
	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 });
}

接口測(cè)試:

asp.net怎么使用WebAPI和EF框架結(jié)合實(shí)現(xiàn)數(shù)據(jù)的基本操作

四、組合條件搜索加分頁(yè)

接受搜索條件的實(shí)體:

public class SearchDto
{
	public int DeptId { get; set; } //部門編號(hào)
	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 });
}

接口測(cè)試:

asp.net怎么使用WebAPI和EF框架結(jié)合實(shí)現(xiàn)數(shù)據(jù)的基本操作

五、數(shù)據(jù)的新增

API接口方案一:(直接使用EF中實(shí)體接受新增的數(shù)據(jù))

[HttpPost]
//此處為降低前端和EF框架實(shí)體的耦合性,也可以重新定義Dto類,然后將Dto數(shù)據(jù)通過(guò)映射,賦值到EF中Employee對(duì)象中
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ù),直接通過(guò)屬性賦值實(shí)現(xiàn)Dto對(duì)象向EF實(shí)體的轉(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)
{
    //屬性依次賦值實(shí)現(xiàn)Dto對(duì)象向EF實(shí)體對(duì)象的轉(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接口方案三:(通過(guò)AutoMapper組件進(jìn)行映射)

AutoMapper組件可以在NuGet中進(jìn)行安裝,經(jīng)過(guò)測(cè)試在framework4.5中無(wú)法使用,在framework4.7.1中可以正常使用。

如果沒有安裝framework4.7.1,可以在官網(wǎng)下載 .NET Framework 4.7.1 Developer Pack。

如果通過(guò)項(xiàng)目的屬性面板中修改了目標(biāo)框架為framework4.7.1,程序可能會(huì)編譯錯(cuò)誤,需要修改配置文件:

compilerOptions="/langversion:6 /nowarn:1659;1699;1701"

修改成:

compilerOptions="/langversion:Default /nowarn:1659;1699;1701"

API接口代碼:(兩種類型屬性名稱完全相同的時(shí)候)

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)
{
    //兩種類型屬性名稱相同自動(dòng)映射
    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接口代碼:(兩種類型屬性名稱不一致的時(shí)候)

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)
{
    //兩種類型名屬性相同自動(dòng)映射
    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 = "添加失敗" });
}

接口測(cè)試:(使用EmpAddDto接受數(shù)據(jù)的時(shí)候注意參數(shù)名稱需要和EmpAddDto的屬性名相同)

asp.net怎么使用WebAPI和EF框架結(jié)合實(shí)現(xiàn)數(shù)據(jù)的基本操作

關(guān)于“asp.net怎么使用WebAPI和EF框架結(jié)合實(shí)現(xiàn)數(shù)據(jù)的基本操作”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí),可以關(guān)注億速云行業(yè)資訊頻道,小編每天都會(huì)為大家更新不同的知識(shí)點(diǎn)。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI