2010-01-24 5 views
3

J'ai une entité entityframework appelée "ABC" (attributs ID et Titre).Modification et mise à jour de l'entité Entity Framework dans ASP .NET MVC

Lors de la mise à jour de l'affichage des enregistrements, j'ai ajouté l'ID comme champ masqué et le titre est la zone de texte.

contrôleur ressemble à quelque chose:

public ActionResult UpdateAction(ABC obj) 

Je reçois tout va bien et juste dans obj - à savoir, le titre et l'ID.

Maintenant, pour mettre à jour l'enregistrement dans la base de données, j'ai lu l'entité d'origine:

var original = (from x in base.context.ABC where x.id == obj.id).Single(); 

Maintenant, pour refléter les changements dans l'original, je pense que devrait faire le modèle de mise à jour:

this.TryUpdateModel(original); 

Je reçois une erreur: | ... indiquant que l'ID de colonne ne peut pas être modifié. Je ne souhaite pas affecter manuellement les propriétés à l'objet d'origine.

L'autre alternative peut être:

TryUpdateModel(original, new string[] { "Title" }, form.ToValueProvider()); 

Mais je déteste les chaînes - aussi, mon objet a comme 20 attributs: |

Quelqu'un peut-il suggérer un meilleur modèle de le faire?

Mfg

+0

Je pense avoir trouvé une solution @ http://stackoverflow.com/questions/922402/strongly-typed-asp-net-mvc- avec-ado-net-entity-framework – effkay

Répondre

2
public class ControllerExt : Controller 
{ 
    protected void UpdateModel<TModel>(TModel model, params Expression<Func<TModel, object>>[] property) where TModel : class 
    { 
     var props = new List<string>(property.Length); 
     foreach (var p in property) 
     { 
      var memberExpression = RemoveUnary(p.Body) as MemberExpression; 
      if (memberExpression == null) 
      { 
       throw new NullReferenceException("Can not retrieve info about member of {0}".FormatThis(typeof(TModel).Name)); 
      } 
      props.Add(memberExpression.Member.Name); 
     } 
     this.UpdateModel(model, props.ToArray()); 
    } 

    private static Expression RemoveUnary(Expression body) 
    { 
     var unary = body as UnaryExpression; 
     if (unary != null) 
     { 
      return unary.Operand; 
     } 
     return body; 
    } 
} 

Exemple:

UpdateModel<MyModel>(model, x => x.PropertyFromMyModel_1, x => x.PropertyFromMyModel_2); 
Questions connexes