2009-08-05 7 views
5

J'ai un modèle, Docs, avec une colonne guid, author_id, qui doit référencer un MembershipUser. J'utilise le MembershipProvider standard (j'ai seulement changé le nom de la base de données), et bien sûr je n'ai pas de modèle pour MembershipUsers.ASP.NET MVC: relation entre les modèles et MembershipUsers

Je peux facilement définir certaines méthodes dans la classe Docs pour obtenir MembershipUser pour un Doc et tous les Docs pour un MembershipUser, mais certaines choses sont difficiles (énumérer les utilisateurs, montrer combien de documents chaque utilisateur a); de plus, je pense que j'utilise MVC d'une manière étrange: il me semble que ce serait plus facile si j'avais un modèle MembershipUsers ...

Comment puis-je implémenter cette relation? Dois-je implémenter un modèle pour MembershipUsers?

grâce

mise à jour: je me rends compte que je n'étais pas du tout clair.

Dites que je veux lister tous mes utilisateurs et leurs documents. Une façon de le faire est:

ViewModel model = new ViewModel() 
{ 
    Users = from MembershipUser user in Membership.GetAllUsers(page, pagesize, out totalusers) 
      select new UserWithDocs 
      { 
       User = user, 
       Docs = context.Docs.Where(c => c.author_id == (Guid) user.ProviderUserKey) 
      }, 
    UsersCount = totalusers 
}; 

Cela fonctionne, mais génère une requête distincte pour chaque utilisateur.

Je pourrais obtenir un tableau de guids des utilisateurs et ensuite demander des documents where author_id IN list_of_guids, mais alors je devrais associer manuellement chaque doc à son auteur.

Quelle est la meilleure solution?

+0

Vous essayez de charger tous les utilisateurs et tous les documents? Cela ressemble à beaucoup de données. Pourquoi ne pas séparer vos vues dans une liste d'utilisateurs, puis explorer une liste de documents pour l'utilisateur sélectionné? Comme vous l'avez souligné, si vous voulez faire cela dans deux requêtes, vous devrez associer manuellement les docs aux utilisateurs en utilisant une boucle foreach. – Junto

Répondre

0

Je ne sais pas si je vous ai bien compris, mais vous pouvez utiliser la classe MembershipUser comme modèle pour les utilisateurs. Si vous souhaitez référencer l'utilisateur dans votre modèle "doc", vous pouvez simplement ajouter une propriété "Author" à votre classe de modèle et lorsque vous récupérez le modèle dans DB, vous pouvez également obtenir l'utilisateur.

la classe d'adhésion contient des méthodes statiques pour lister tous les utilisateurs, ajouter/supprimer des utilisateurs, etc.

Questions connexes