J'utilise subsonic pour accéder à ma base de données dans une application mvc. Lors de la tentative de mise à jour d'un enregistrement à l'aide de la liaison de modèle mvc, l'enregistrement ne se met pas à jour car aucune des colonnes n'est marquée comme étant sale.Comment utiliser la mise à jour Subsonic en utilisant la liaison de modèle mvc?
J'ai essayé de marquer manuellement toutes les colonnes comme étant corrompues en modifiant le code subsonique, mais parfois je ne veux que mettre à jour certaines propriétés, donc je ne veux pas les marquer comme sales.
Quelle est la meilleure façon de faire cela?
ceci est mon action:
[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");
}
c'est comment je peaufiné le code subsonique:
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:
J'ai essayé ce code pour voir où le problème mensonges:
var m = new mapping { ID = 2, Name = "33" };
m.SetIsNew(false);
m.Save();
Cela aussi ne fonctionne pas les colonnes ne sont pas mis à sale. Il semble que lorsque l'initialiseur d'un objet est utilisé, les setters ne sont pas appelés, donc les colonnes ne sont pas mises à dirty.
Je suppose que la liaison de modèle mvc.net par défaut fonctionne de cette façon et c'est pourquoi l'enregistrement n'est pas mis à jour.
Modifier 2
Ma première édition est erronée @ dyork12 souligné. Subsonic utilise un indicateur 'isLoaded', lorsqu'il est défini sur false, les propriétés de paramètre ne les définissent pas comme étant sales. ceci est utilisé par subsonic lors du chargement d'un enregistrement, pour s'assurer que la définition des propriétés pendant le chargement ne soit pas aussi sale.
Mais ma question demeure quelle est la meilleure solution pour éditer un objet subsonique à partir d'une vue mvc.net en utilisant la liaison de modèle automatique.
À votre avis, est-ce que vous liez l'objet généré par SubSonic ou utilisez un ViewModel? Avez-vous vu cette? http://stackoverflow.com/questions/5491733/subsonic-and-automapper-dirtycolumns-collection-is-empty-therefore-cant-updat – DaveHogan
Pourquoi ne sont-ils pas marqués sales? Ce fragment de code provient d'ActiveRecord, et si vous liez aux propriétés de la colonne, tout devrait fonctionner correctement. Que faites-vous différemment? Plus de code s'il vous plaît. –
@ dyork12: j'ai répondu dans le 'edit'. – Daniel