.net core 在WebApi中更新子实体的最佳实践是什么?
我的主要问题是,在WebApi中插入子实体后更新它们的最佳实践是什么 因为可以添加和删除一些子实体 情景: 假设我有两个实体:.net core 在WebApi中更新子实体的最佳实践是什么?,.net-core,entity-framework-core,asp.net-core-webapi,.net Core,Entity Framework Core,Asp.net Core Webapi,我的主要问题是,在WebApi中插入子实体后更新它们的最佳实践是什么 因为可以添加和删除一些子实体 情景: 假设我有两个实体: Quiz - id - name Questions - id - quizId - question 当我要添加带有一些问题的测验时,使用以下json: [ { "id": 0, "name": "Quiz 1", "questio
Quiz
- id
- name
Questions
- id
- quizId
- question
当我要添加带有一些问题的测验时,使用以下json:
[
{
"id": 0,
"name": "Quiz 1",
"questions": [
{
"id": 0,
"quizId": 0,
"question": "question 1"
},
{
"id": 0,
"quizId": 0,
"question": "question 2"
},
{
"id": 0,
"quizId": 0,
"question": "question 3"
}
]
}
]
因此,在该实体解析我的ID并插入数据库之后
之后,用户决定删除“问题1”并添加“问题4”
因此,理论上要更新的json是:
[
{
"id": 1,
"name": "Quiz 1",
"questions": [
{
"id": 2,
"quizId": 1,
"question": "question 2"
},
{
"id": 3,
"quizId": 1,
"question": "question 3"
},
{
"id": 0,
"quizId": 1,
"question": "question 4"
}
]
}
]
问题是:“问题1”仍在数据库中,但“问题4”已添加到数据库中。那么,如何删除“问题1”?如果传递的数据中不包含现有问题,您可以对其进行预处理并将其删除:
public async Task<IActionResult> PutQuiz(Quiz model)
{
var exsitQuiz = _context.Quizzes.Where(q => q.id == model.id)
.Include(q => q.questions).SingleOrDefault();
if (exsitQuiz != null)
{
foreach (var oldquestion in exsitQuiz.questions.ToList())
{
var flag = model.questions.Any(c => c.id == oldquestion.id);
if (!flag)
{
_context.Questions.Remove(oldquestion);
_context.SaveChanges();
}
}
}
}
公共异步任务PutQuike(测验模型)
{
var exsitquick=_context.Quizzes.Where(q=>q.id==model.id)
.Include(q=>q.questions).SingleOrDefault();
if(exsitquick!=null)
{
foreach(exsitquick.questions.ToList()中的var oldquestion)
{
var flag=model.questions.Any(c=>c.id==oldquestion.id);
如果(!标志)
{
_上下文。问题。删除(旧问题);
_SaveChanges();
}
}
}
}
Hi Rena,谢谢你的回复,我考虑过,这会解决问题,但仍然不是最好的方法。Hi@PauloGentile,如果你使用EF Core,据我所知,没有快速更新子实体的方法。如果你使用EF6,你可以使用GraphDiff。