У меня есть два связанных объекта, которые являются отношениями один-ко-многим, как показано ниже:
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 детей с именем: ( яблоко, груша ),теперь я хочу обновить его через web api, чтобы он содержал 3 дочерних элемента ( яблоко, апельсин, банан ), обратите внимание, здесь удалена существующая дочерняя груша и 2 новых дочерних элемента (оранжевый, banana), здесь предположим, что апельсин уже существует в таблице child, но banana нет, его следует рассматривать как новую запись в дочерней таблице , и я могу получить свою обновленную модель с именем 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", как в SQL в Entity Frameworkядро?Я действительно с нетерпением жду еще нескольких руководств в реальных приложениях с Entity Framework ...