2010-10-12 6 views
0

J'ai une confusion concernant les modèles lorsque nous avons des relations entre plusieurs tables. Auparavant, j'utilisais des vues ou des procédures stockées de SQL pour manipuler des données mais maintenant j'utilise Entity Framework si confus à quoi mon modèle devrait ressembler? J'ai une table pour Users, UserImages, UserRoles.MVC Model Confusion

UserImages et UserRoles fait référence à UserID de Users table.Je ne suis pas sûr de la façon dont mon modèle devrait être. Lors de l'affichage de données, j'utilise généralement une vue créée dans le serveur SQL en joignant ces 2 tables. Et quand un utilisateur est édité ou créé, je mets à jour ces 3 tables.

Vous ne savez pas à quoi devrait ressembler mon modèle dans ce cas? Puis-je créer une vue de serveur SQL et l'ajouter à edmx? Ou ajouter 3 tables séparément dans EDMX et créer des propriétés personnalisées dans le modèle utilisateur pour ces 2 autres tables?

[HttpPost] public ActionResult Créer (UserFormViewModel UserView) {

 User user = UserView.User; 

     try { 

      if (ModelState.IsValid) { 
       repository.AddUser(user); 
       repository.Save(); 

       return View(new UserFormViewModel(user)); 
      } else { 
       return View(new UserFormViewModel(user)); 
      } 
     } catch (Exception ex) { 
      ModelState.AddModelError("Error", ex.Message); 
      return View(new UserFormViewModel(user)); 
     } 
    } 





public class UserFormViewModel { 

    UucsrRepository repository = new UucsrRepository(); 

    public User User { get; private set; } 
    public SelectList States { get; private set; } 
    public SelectList Genders { get; private set; } 
    public SelectList RolesLists { get; private set; } 
    public SelectList SelectedRolesLists{ get; private set; } 

    public UserFormViewModel(User contact) { 
     User = contact; 
     States = new SelectList(repository.GetAllStates() ,"ShortName","Name"); 
     Genders = new SelectList(repository.GetAllGenders(), "Gender", "Description"); 
     RolesLists = new SelectList(repository.GetAllRolesLists(), "Id", "Name"); 
    } 
} 

Je ne sais pas comment dois-je gérer exactement la liste des rôles Ajout et images ici.

Répondre

1

La classe User doit avoir une liste de rôles et d'images. Les tables doivent avoir des clés étrangères entre elles par UserId. Lorsque vous générez les modèles à partir de vos tables, sélectionnez toutes les tables que vous souhaitez utiliser. Le modèle User devrait dans ce cas avoir automatiquement une liste de UserRoles et UserImages. Changez les noms de manière appropriée. Lors de l'ajout ou de la modification de rôles ou d'images, vous devez aller chercher l'utilisateur et le mettre à jour ou l'ajouter à la liste correcte. Voilà comment je le ferais. Dans ce cas, votre utilisateur est une racine agrégée. Découvrez DDD vous êtes intéressé.

+0

Je l'aurais fait de la même manière. Fondamentalement Entity Framework est un ORM et ORM vous permet de gérer votre modèle. Vous avez User, UserIMage et UserRole en tant qu'objets de votre domaine. Votre utilisateur a une relation à plusieurs avec Image et Rôle qui sera contenu par l'objet Utilisateur. HTH. – Pradeep

+0

J'ai ajouté mon code ici juste au cas où vous pourriez jeter un oeil. – Mathew