我目前在使用物體框架和 AutoMapper 庫的 API 中遇到問題,其中
我試圖通過傳遞一個 JSON 物件來更新請求詳細資訊,該物件的屬性具有一個空陣列作為請求正文中的值,如下所示:
{
"id": 1,
"name": "user 2",
"active": true,
"photos": []
}
但是在我發送請求之前,物件是這樣的:
{
"id": 1,
"name": "user 1",
"active": false,
"photos": [
{
"filename": "filename.jpg",
"imageType": "img/jpeg"
}
]
}
在我將 JSON 提交給 api 并獲取新值后,“photos”屬性也變為空,如下所示:
{
"id": 1,
"name": "user 2",
"active": true,
"photos": []
}
這也是我在 API 端呼叫的方法
public ActionResult Update([FromBody] RequestViewModel body)
{
using (var dbContext = new PrimaryDbContext())
{
var data = dbContext.Set<Request>().Include("Photos").Where(r => r.Id == body.Id).FirstOrDefault();
if(data == null) return NotFound();
Mapper.Map(body, data);
dbContext.SaveChanges();
return Ok(data);
}
}
這很奇怪,因為在我將帶有空陣列的 JSON 傳遞給 API 之前,它不會洗掉照片。我只是不明白為什么現在會出現這個問題
uj5u.com熱心網友回復:
它也更新了照片,因為您將它們包含在您的選擇查詢中。嘗試從選擇中洗掉照片
var data = dbContext.Set<Request>()
.Where(r => r.Id == body.Id)
.FirstOrDefault();
uj5u.com熱心網友回復:
我沒有洗掉物體框架加載的 Include() 方法,而是將 AutoMapper 配置為在將 RequestViewModel 的值傳遞到 Request 的屬性時排除照片的映射,如下所示:
從
CreateMap<RequestViewModel,Request>();
到
CreateMap<RequestViewModel,Request>()
.ForMember(r => r.Id,o => o.MapFrom(rvm => rvm.Id))
.ForMember(r => r.Name,o => o.MapFrom(rvm => rvm.Name))
.ForMember(r => r.Active,o => o.MapFrom(rvm => rvm.Active))
.ForAllOtherMembers(o => o.Ignore());
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/369960.html
標籤:C# 。网 实体框架 asp.net-web-api 实体框架-6
下一篇:如何按降序對串列進行排序
