私は少し混乱しています。以下が機能する理由がわかりません。
AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit(int id, FormCollection formValues) {
Dinner dinner = dinnerRepository.GetDinner(id);
UpdateModel(dinner);
dinnerRepository.Save();
return RedirectToAction("Details", new { id = dinner.DinnerID });
}
このサンプルは、Scott Guthrie の NerdDinner ウォークスルーから取得したもので、dinnerRepository.Save() は次のように定義されています。
public void Save() {
db.SubmitChanges();
}
また、 dinnerRepository.GetDinner(id) は次のように定義されています。
public Dinner GetDinner(int id) {
return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
}
つまり、db NerdDinnerDataContext はどのようにしてディナー オブジェクトを保存することを「認識する」のでしょうか?
私のLinq To SQLの理解には穴があるに違いありませんが、それを特定できれば吹き飛ばされます。さて、dinner オブジェクトには ID がありますが、その ID を持つ特定のレコードに送信する変更があることを db に伝えるにはどうすればよいでしょうか?
私はそれを見ることができません。ワールドカップに違いない…
DataContext オブジェクトの db が、GetDinner メソッド呼び出しを使用して取得したディナー オブジェクトへの参照を保持しているとしか思えません。しかし...すべてが少し「魔法」のように感じます
アンドリュー