これに関するすべての記事とスタックオーバーフローの質問を読んだと思いますが、解決策を見つけることができません。私のモデルから始めましょう
public class Entry
{
public Entry ()
{
DateEntered = DateTime.Now;
}
public int Id { get; set; }
[Required]
public string FirstName { get; set; }
[Required]
public string LastName { get; set; }
[Required]
public string Email { get; set; }
public string Number { get; set; }
public string FbId { get; set; }
[ReadOnly(true)]
public DateTime DateEntered { get; set; }
public string AccessToken { get; set; }
//Relationsips
public Backgrounds Background { get; set; }
public Cars Car { get; set; }
}
public class Backgrounds
{
public int Id { get; set; }
public string Name { get; set; }
public string Filename { get; set; }
}
public class Cars
{
public int Id { get; set; }
public string Name { get; set; }
public string FileName { get; set; }
}
コントローラで、エントリを更新しています。次のように
// PUT /api/entries/5
public HttpResponseMessage Put(Entry entry)
{
if(ModelState.IsValid)
{
_db.Entries.Attach(entry);
_db.Entry(entry).State = EntityState.Modified;
_db.SaveChanges();
return new HttpResponseMessage(HttpStatusCode.NoContent);
}
throw new HttpResponseException(HttpStatusCode.BadRequest);
}
私の Entry モデルは正しく更新されますが、たとえば entry.Background.Name が変更された場合、これはデータベースに保持されません。私のコントローラーは、その関係を含むエントリ モデル全体を受け入れます => 背景と車。ただし、リレーションシップに変更された値は更新も反映もされません。データベースにクエリを実行してから更新する必要のないエレガントなソリューションはありますか? 更新する前に余分なクエリやルックアップをしたくありません。
ありがとう
タイロン