我有些糊塗。我不能之所以以下工作:編輯發佈操作 - 爲什麼respository.save()保存數據?
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 });
}
樣品從斯科特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的理解中必然會有一個漏洞,但是如果我能夠指出它的話就會被打擊。好的,所以晚餐對象有一個ID,但是告訴數據庫使用該ID爲特定記錄提交了更改?我只是看不到它。必須是世界盃...
我只能認爲DataContext對象,db,保留了使用GetDinner方法調用得到的晚餐對象的引用。但是......這一切都感覺有點「神奇」
安德魯
很好,但它是如何知道哪個對象用作更新的記錄並進行了更改?顯然,它保持對創建的對象的引用。將看看這些屬性。很明顯,LINQ To SQL比我想象的要多。將不得不深入到這個底部。非常感謝你們兩位。一個人必須得到餅乾,所以會獎勵首先回答的雅各布。 – awrigley 2010-06-20 21:47:11
我不確定Linq2Sql是如何工作的細節,並且您可能或可能無法挖掘代碼以找出答案。如果你感興趣的話,NHibernate還會跟蹤從數據庫中檢索哪些對象,哪些是新創建的,以及這些對象發生的所有更改(並且它使用動態代理)。您可能會發現查看NHibernate源代碼並查看他們解決特定問題的方法是否有趣。 – ckramer 2010-06-20 22:54:10
我正在研究它,是的,datacontext實例跟蹤它在範圍內檢索到的數據。這是我理解中的一個大漏洞,我需要填寫它。只需要弄清楚這些參考文件的工作方式。 – awrigley 2010-06-21 20:06:01