Je suis un peu embrouillé. Je ne peux pas raison pour laquelle les travaux suivants:Éditer l'action Post - pourquoi respository.save() enregistre-t-il les données?
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 });
}
L'échantillon est prélevé dans la procédure pas à pas NerdDinner de Scott Guthrie, où dinnerRepository.Save() est définie comme:
public void Save() {
db.SubmitChanges();
}
Et dinnerRepository.GetDinner (id) est défini comme suit:
public Dinner GetDinner(int id) {
return db.Dinners.SingleOrDefault(d => d.DinnerID == id);
}
Ie, comment le db NerdDinnerDataContext « savoir » pour sauver l'objet dîner?
Il doit y avoir un trou dans ma compréhension de Linq To SQL, mais soufflé si je peux le pointer. OK, donc l'objet dinner a un identifiant, mais qu'est-ce qui indique à db qu'il y a des changements à soumettre pour cet enregistrement spécifique avec cet Id?
Je ne peux pas le voir. Doit être la Coupe du Monde ...
Je ne peux que penser que l'objet DataContext, db, garde une référence à l'objet dîner qui a été obtenu en utilisant l'appel de méthode GetDinner. Mais ... Tout se sent un peu « magique »
Andrew
Bien, mais comment sait-il quel objet utiliser comme l'enregistrement mis à jour qui a les modifications? , il garde une référence à l'objet qui a été créé. Regardera ces propriétés. De toute évidence, LINQ To SQL fait plus que ce que je pensais. Devra aller au fond de celui-ci. Merci beaucoup à vous deux. On doit obtenir le biscuit, ainsi va récompenser Jacob qui a répondu en premier. – awrigley
Je ne suis pas sûr des détails de la façon dont Linq2Sql fonctionne, et vous pouvez ou non être en mesure de creuser dans le code pour le savoir. Si vous êtes intéressé, NHibernate surveille également quels objets ont été récupérés dans la base de données et lesquels ont été créés, ainsi que tous les changements qui ont été apportés à ces objets (et cela en utilisant des éléments tels que Dynamic Proxies). Il peut vous sembler intéressant d'examiner le code source de NHibernate et de voir quelle est leur approche pour résoudre ce problème particulier. – ckramer
Je l'examine, et oui, une instance de datacontext suit les données qu'elle a récupérées pendant qu'elles sont dans la portée. Ce fut un gros trou dans ma compréhension et je dois le remplir. Juste besoin de comprendre exactement comment les références fonctionnent. – awrigley