データベース内の3つのテーブルを1つのPUTメソッドから更新しようとしています。私のWebページではJSONを作成し、Web APIにPUTメソッドで送信します。 PUTメソッドは、vs2017によって生成されたデフォルトの方法です:私は3機種持っ"PUT"メソッドからの更新をカスケードして、mysqlの多対多リレーションシップのすべてのテーブルを更新する方法はありますか?
// PUT: api/Engineers/5
[HttpPut("{id}")]
public async Task<IActionResult> PutEngineer([FromRoute] int id, [FromBody] Engineer engineer)
{
if (!ModelState.IsValid)
{
return BadRequest(ModelState);
}
if (id != engineer.EngineerId)
{
return BadRequest();
}
_context.Entry(engineer).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!EngineerExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return NoContent();
}
:Engineer.cs、Application.csを、テーブルEngineerApplications.csに参加。これらのテーブルは、エンジニアがサポートしているアプリが多く、アプリにサポートしているエンジニアが多い多対多の関係になっています。
Engineer.cs:
public class Engineer
{
...Some Stuff Here...
//Navigation Property
public ICollection<EngineerApplications> EngineerApplications { get; set; }
}
Application.cs:
public class Application
{
...Some Stuff Here...
//Navigation Property
public ICollection<EngineerApplications> EngineerApplications { get; set; }
}
EngineerApplications.cs:
public class EngineerApplications
{
public int EngineerId { get; set; }
public int ApplicationId { get; set; }
public Engineer Engineer { get; set; }
public Application Application { get; set; }
}
JSON:
[{
"engineerId": 1,
"supportedApplications": [{
"application": {
"applicationId": 1,
"engineerApplications": null
},
"applicationId": 1,
"engineer": {
"engineerId": 1,
"engineerApplications": null
},
"engineerId": 1
},
{
"application": {
"applicationId": 2,
"engineerApplications": null
},
"applicationId": 2,
"engineer": {
"engineerId": 1,
"engineerApplications": null
},
"engineerId": 1
}]
},
...
]
このJSONが後ろのPUTメソッドに当たると、エンジニアテーブルを更新したいのですが、EngineerApplicationsとApplicationsテーブルも更新したいと思います。現在、エンジニアテーブルのみが更新されます。
私はC#/ Web API/EFcore/etcの初心者で、これをどうやって行うのか分かりません。私は解決策を見回しましたが、うまく機能しているか、それとも私のコードに似たものが見つかりませんでした。
他の2つのテーブルを手動で更新する必要があると仮定しますが、それを行う方法もわかりません。
、エンティティを取得し、あなたのビューモデルに応じて、すべての変更を適用し、あなたのDbContextインスタンスにSaveChangesMethodを呼び出し、それが理にかなっていますか? –
非常に高いレベルでは論理が理にかなっています。残念ながら、私はそれらのことを行う方法を理解していません。 idkどのようにエンティティを取得するか、idkどのように変更を適用するか。 – Paulo