簡體   English   中英

實體框架核心-如何處理相關實體的映射和保存

[英]Entity Framework Core - How to handle Related Entity Mapping and Saving

我有兩個相關的實體,它們是一對多關系,如下所示:

class parent{
 public string parentName{get;set;}
 public virtual ICollection<child> childs { get; set; }
}

class child{
  public string childName{get;set;}
  public parent parent{get;set;}
  ["ForeignKey"]
  public int parentId {get; set;}
}
/// View Model
class VMParent{
  public string parentName{get;set;}
  /// a string array contains child name
  public string[] childlist { get; set; }
}

假設我的父母當前有2個孩子,名字為( apple,pear ),現在我想通過Web api更新它以包含3個孩子( apple,orange,banana ),請注意,這里刪除了已存在的子梨,並有2個新的孩子(添加了orange,banana),這里假定table child中已經​​存在orange了,但是香蕉不存在,應該將其視為child table的新條目 ,並且我可以在字符串數組中獲得帶有childs名稱的更新模型( [“ apple”,“ orange”,“ banana”] )來自Web api主體視圖模型,例如:

[HttpPut("{id}")]
public async Task<IActionResult> Update(string name, [FromBody]VMParent VMUpdateParent)
{
    if (ModelState.IsValid)
    {
        var existingParent = await _context.Parents
                            .Include(t => t.childs)
                            .SingleOrDefaultAsync(p => p.parentName == name);

        existingParent.parentName = updateParent.parentName;

        var childsToBeUpdated = updateParent.childList; /// ["apple","orange","banana"]

        /// HOW TO HANDLE or REBUILD the relationship that can
        /// 1) remove child (pear) from existingParent
        /// 2) add child "banana" to Child table
        /// 3) add childs (orange and banana) to existingParent?
        ......

        _context.Parents.Update(existingParent);
        await _context.SaveChangesAsync();

        return new NoContentResult();
    }
    return BadRequest(ModelState);
} 

是否有任何“ MERGE”語句,例如Entity Framework Core中的SQL? 我真的很期待在更多關於實體框架的實際應用中的教程。

我自己通過在視圖模型VMUpdateParent現有模型existParent之間使用AutoMapper來找出一種解決方案,以刪除不必要的子節點並添加新的子節點。

但是,如果有人有任何改進或更好的解決方案,請隨時在這里分享。 提前致謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM