我使用亞音速在mvc應用程序中訪問我的數據庫。 當使用mvc模型綁定嘗試更新記錄時,記錄不會更新,因爲非列的標記爲髒。如何使用monic模型綁定使用Subsonic更新?
我試圖通過調整亞音速代碼手動標記所有列爲髒,但有時我只想更新一些屬性,所以我不想將它們全部標記爲髒。
要做到這一點的最佳方法是什麼?
這是我的行動:
[HttpPost]
public ActionResult Update(mapping m)
{
m.SetIsNew(false);
m.Update(true); // here i tweaked the subsonic code passing true sets all the columns to be dirty and updates the record even though isLoaded=false
return RedirectToAction("New");
}
這是我調整了亞音速代碼:
public void Update(IDataProvider provider, Boolean forceUpdate){
if(this._dirtyColumns.Count>0 || forceUpdate){
if(forceUpdate)
this._dirtyColumns = this.Columns.ToList();
_repo.Update(this,provider);
_dirtyColumns.Clear();
}
OnSaved();
}
編輯:
我嘗試了這個代碼,看看問題出在哪裏謊言:
var m = new mapping { ID = 2, Name = "33" };
m.SetIsNew(false);
m.Save();
這也不起作用的列沒有設置爲髒。看起來,當使用對象初始值設定項時,設置程序不會被調用,所以列不會變髒。
我會假設默認的mvc.net模型綁定以這種方式工作,這就是爲什麼記錄沒有被更新。
編輯2
我的第一個編輯是錯誤的,因爲@ dyork12指出。 Subsonic使用'isLoaded'標誌,當它被設置爲false時,設置屬性不會將它們設置爲髒。亞音速在加載記錄時使用,以確保加載時的設置屬性不會被設置爲髒。
但我的問題仍然是什麼是使用自動模型綁定從mvc.net視圖編輯亞音速對象的最佳解決方法。
在您的視圖上,您是綁定SubSonic生成的對象還是使用ViewModel?你見過這個嗎? http://stackoverflow.com/questions/5491733/subsonic-and-automapper-dirtycolumns-collection-is-empty-therefore-cant-updat – DaveHogan 2012-01-10 08:13:50
爲什麼他們不標記髒?該代碼片段來自ActiveRecord,如果綁定到列屬性,它應該都可以正常工作。你有什麼不同?請更多代碼。 – 2012-01-10 12:57:06
@ dyork12:我在'編輯'中回答。 – Daniel 2012-01-10 14:22:19