2011-02-25 3 views
0

Dans un contrôleur, je fais ce qui suit:ASP.NET MVC: Mise à jour du modèle depuis le modèle?

DBContext DB = new DBContext(); 
var u = DB.Users.Find(1); 
u.firstname = "blah"; 
UpdateModel(u); 
DB.SaveChanges(); 

Je veux faire la même chose à partir d'un modèle ...

namespace Project.Models 
{ 
    public class User 
    { 
    public void resetPassword() 
    { 
     // Generate new password, etc. 
     this.password = "blah"; 
    } 
    } 
} 

Toute idée de comment je vais agir dans ce sens? Il semble que UpdateModel() est disponible uniquement depuis les contrôleurs. J'utilise EntityFramework Code-First CTP5.

+0

Qu'est-ce que vous réalisez en utilisant UpdateModel() ici qui serait lié à la base de données? –

Répondre

0

Il est déconseillé de mettre des problèmes d'accès aux données dans votre modèle.

Mise à jour: Oui, vous avez généralement une couche d'accès aux données pour cela. Comme le dit Andy, la façon la plus à la mode de le faire est d'utiliser un dépôt. En règle générale, vous ne voulez rien dans votre modèle qui ne soit pas la logique métier principale.

+0

Que diriez-vous d'une classe non-contrôleur, où je reçois le même problème? Il est évidemment faux d'appeler une fonction dans un contrôleur d'un autre contrôleur, donc logiquement je l'encapsulerais dans une classe de bibliothèque ..? –

+1

Pourquoi le -1? ..... – UpTheCreek

1

Je pense que UpTheCreek est correct, mais il a probablement besoin d'explications, donc je vais essayer de développer sa réponse. La première étape serait d'utiliser le repository pattern. Vous pouvez trouver de nombreux exemples de ce modèle dans MVC avec une recherche google - this est une introduction particulièrement douce (environ 3/4 de la page).

La procédure se poursuit en mentionnant l'injection de dépendances, et c'est aussi quelque chose qui vaut la peine d'être consulté. J'ai tendance à favoriser Ninject moi-même, cependant il y a other des conteneurs d'injection de dépendance disponibles.

+0

Oui, c'est une meilleure réponse que la mienne :) – UpTheCreek