2010-02-01 3 views
1

J'ai du mal à comprendre comment utiliser les adhésions dans MVC. Je sais qu'il ya la base de données ASPNETDB intégrée qui a toutes les tables de base pour les utilisateurs et autres. Mais que se passe-t-il si je veux ajouter une relation entre une de mes tables personnalisées et cette table utilisateur intégrée?Comment puis-je ajouter des relations à la base de données aspnetdb dans MVC?

Si j'avais une table de base de données contenant des commentaires de blog, nous l'appellerions Commentaire. Et chaque commentaire avait un ID utilisateur associé à ce que je pourrais faire quelque chose comme?

User.Comments.Add (someCommentObj)

Quelqu'un sait d'un bon article sur ce sujet? Est-ce seulement possible?

Merci

Répondre

0

Jetez un oeil à cet article étendu sur la MembershipProvider:
http://www.4guysfromrolla.com/articles/120705-1.aspx

Regardez la partie 6 et 7, vous aurez probablement envie de mettre en œuvre un ProfileProvider personnalisé et stocker la référence de commentaire dans Le profil.

Partie 6 - capture des informations spécifiques à l'utilisateur supplémentaire en utilisant le système de profil . En savoir plus sur le SqlProfileProvider intégré .

Partie 7 - les membres, les rôles et les systèmes de profil sont tous construire en utilisant le modèle de fournisseur, ce qui permet leurs mises en œuvre pour être très

+0

Si j'utilise LINQ to Entities pouvez ces relations être créé automatiquement? – hanesjw

+0

Je ne suis pas sûr s'il y a un moyen entièrement automatique. Rechercher "linq to entities profileprovider". E.g .: http://www.codeproject.com/KB/aspnet/LINQCustomProfileProvider.aspx – Zyphrax

0

Si vous voulez utiliser votre propre adhésion personnalisée tables, vous devrez créer votre propre MembershipProvider. Matt Wrock a walkthrough:

Vous remarquerez que le AccountModel par défaut vous permet d'injecter votre propre fournisseur:

public AccountMembershipService(MembershipProvider provider) 
{ 
    _provider = provider ?? Membership.Provider; 
} 

Nerdinner a un exemple de dependency injection que vous trouverez probablement utile:

0

Avertissement Voici deux solutions qui fonctionneront. Le premier est facile. Le 2ème, je pense que c'est ce que vous recherchez, mais prenez-le pour ce que ça vaut. Assurez-vous de réaliser ce que vous faites, car cela va prendre les données du fournisseur d'adhésion et y accéder directement, ce qui pourrait entraîner des bombes cachées si vous ne faites pas attention (comme la suppression de données).

Les données d'appartenance sont destinées à être simplement utilisées pour l'authentification; rôles pour autoriser; profils pour les données spécifiques à l'utilisateur (comme le fuseau horaire ou la couleur préférée).

Solution Un

Si vous voulez ajouter un commentaire sous l'utilisateur actuel (ou tout autre utilisateur), vous pouvez faire:

var comment = new Comment(....); 
comment.userId = User.Identity.Name; //for user name 

ou

comment.userId = new Guid(Membership.GetUser().ProviderUserKey); //for guid in table 

C'est la façon eays et vous n'avez jamais vraiment accès direct aux tables aspnet, vous utilisez juste son info.

Solution Deux

Je suppose que vous utilisez L2S et le concepteur dans VS. En ajoutant les tables d'appartenance à votre conception L2S, vous aurez accès à ses données. Cela peut même être préférable pour certaines requêtes rapides (comme les dates, les informations de verrouillage, etc. car vous n'avez pas besoin d'utiliser les sprocs intégrés qui ont un sérieux code over-kill et lourd). Si vous créez une relation dans la base de données ou dans le concepteur L2S, vous disposez d'une relation à laquelle vous pouvez accéder comme le demande votre question.

À ce stade, le concepteur a créé vos classes pour les commentaires et les utilisateurs. Si vous faites quelque chose avec la table utilisateur que vous venez de créer, vous contournez la conception du fournisseur d'adhésion - ne le faites pas à moins que vous ne le fassiez maintenant. Lorsque vous ajoutez un commentaire à l'utilisateur, il ajoute le commentaire aux tables de commentaires avec la relation correcte intacte.

Vous devriez maintenant être en mesure de le faire:

var user = MyUser.GetById(userId); 
user.Comments.Add(comment); 

Rappelez-vous, que l'utilisateur dans ce cas est différent que lorsque vous faites

var user = Membership.GetUser(userId); 
Questions connexes