Я использую дозвуковой доступ к моей БД в приложении mvc. При попытке обновить запись с использованием привязки модели mvc запись не обновляется, так как не столбцы помечены как грязные.Как использовать субзвуковое обновление с использованием привязки модели mvc?
Я попытался вручную пометить все столбцы как грязные, изменив дозвуковой код, но иногда я хочу только обновить некоторые свойства, поэтому я не хочу отмечать их все как грязные.
Каков наилучший способ сделать это?
это мое действие:
[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();
}
EDIT:
Я попробовал этот код, чтобы увидеть, где проблема лежит:
var m = new mapping { ID = 2, Name = "33" };
m.SetIsNew(false);
m.Save();
Это тоже не работает, столбцы не настроены на загрязнение. Похоже, что когда используется инициализатор объекта, сеттеры не вызываются, поэтому столбцы не настроены на загрязнение.
Я бы предположил, что привязка модели mvc.net по умолчанию работает таким образом, и поэтому запись не обновляется.
Edit 2
Моя первая правка неправильно, как @ dyork12 указал. Subsonic использует флаг 'isLoaded', когда он установлен в свойства ложных настроек, не устанавливает их как грязные. это используется дозвуковым при загрузке записи, чтобы убедиться, что параметры настройки при загрузке не установлены тогда как грязные.
Но мой вопрос остается тем, что является лучшим обходным решением для редактирования дозвукового объекта из представления mvc.net с использованием автоматической привязки модели.
На ваш взгляд, вы связываете объект SubSonic сгенерированный объект или используете ViewModel? Вы видели это? http://stackoverflow.com/questions/5491733/subsonic-and-automapper-dirtycolumns-collection-is-empty-therefore-cant-updat – DaveHogan
Почему они не помечены грязными? Этот фрагмент кода от ActiveRecord, и если вы привязываетесь к свойствам столбца, все должно работать правильно. Что вы делаете по-другому? Больше кода пожалуйста. –
@ dyork12: я ответил в «edit». – Daniel