1

Je me demandais d'abord avec le code Entity Framework 4.1 comment gérez-vous les requêtes qui impliquent une table existante aspnet_Users?Entity Framework code premier aspnet_Users mappage/jointures

Fondamentalement, j'ai une exigence pour une requête qui implique les aspnet_Users pour que je puisse retourner le nom d'utilisateur:

SELECT t.Prop1, u.Username 
FROM Table1 t 
INNER JOIN aspnet_User u ON t.UserId = u.UserId 
Where t.Prop2 = true 

Idéalement situé dans LINQ je voudrais:

from t in context.Table1 
join u in context.aspnet_Users on t.UserId equals u.UserId 
where t.Prop2 = true 

Mais je ne suis pas sûr comment obtenir mappage aspnet_Users à un utilisateur de classe? Comment puis-je intégrer aspnet_Users à mon dbset?

Toute aide serait appréciée, merci à l'avance

Répondre

0

Vous ne avez pas vraiment besoin d'utiliser Entity Framework pour accéder aux comptes des fournisseurs de aspnet_membership. Vous avez juste besoin de créer une instance de l'objet d'appartenance, de transmettre un identifiant utilisateur unique et une valeur booléenne indiquant s'il faut mettre à jour la valeur LastActivityDate pour l'utilisateur et la méthode renvoie un objet MembershipUser rempli avec les valeurs actuelles de la source de données. utilisateur spécifié.

Vous pouvez ensuite accéder au nom d'utilisateur en utilisant la propriété de "Nom d'utilisateur".

Exemple:

private MembershipUser user = 
    Membership.GetUser(7578ec40-9e91-4458-b3d6-0a69dee82c6e, True); 

Response.Write(user.UserName); 

Si vous avez des questions sur MembershipProvider, vous pouvez lire à ce sujet sur le site MSDN sous le titre de « Managing Users by Using Membership ».

Espérons que cela vous aide avec votre exigence.

+0

Salut, merci de m'avoir répondu, mais je ne veux pas que le nom d'utilisateur d'un seul utilisateur se passe si une collection d'utilisateurs est retournée, comment puis-je obtenir le nom d'utilisateur pour chaque ligne? – DotnetShadow

+0

Vous pouvez utiliser ceci: MembershipUserCollection users = Membership.GetAllUsers(); qui obtient une collection de tous les utilisateurs dans la base de données. Vous pouvez alors foreach cette collection comme vous le feriez pour toute autre collection. – Chris

2

Ne mappez pas la table aspnet_Users ou toute autre table liée à aspnet. Ces tables ont leur propre accès aux données et leur propre logique d'accès. La cartographie de ces tables introduira la duplication du code, les problèmes possibles et la séparation des problèmes. Si vous avez besoin d'utilisateurs pour des requêtes, créez une vue avec uniquement les informations nécessaires, telles que l'identifiant, le nom d'utilisateur, l'adresse e-mail et la carte. Le point est que la vue sera en lecture seule, elle ne contiendra que des données autorisées et votre application ne modifiera pas accidentellement ces données sans utiliser l'API ASP.NET.

+0

Merci.C'est ce que j'essayais de faire en soulignant qu'un développeur devrait vraiment utiliser les classes et les méthodes qui lui sont données par le biais du fournisseur d'adhésion. – Chris

+0

Merci pour la réponse, afin de mieux comprendre la vue dans mon exemple ci-dessus en utilisant linq dites-vous que j'ai une vue SQL et que je mappe cette vue pour dire un objet userinfo avec diverses propriétés? puis j'utilise cet objet avec linq? ou pourriez-vous donner un exemple si possible? – DotnetShadow

+0

Oui c'est ce que je voulais dire. –

1

Lisez d'abord la réponse de Ladislav. Si vous voulez toujours aller de l'avant: faire ce que vous voulez impliquerait de mapper les utilisateurs et les rôles et les tables des membres dans le domaine codefirst - ce qui signifie écrire un fournisseur d'appartenances dans le code d'abord.

Heureusement, il existe un projet pour ce http://codefirstmembership.codeplex.com/ bien que ce ne soit pas une implémentation parfaite. L'original est VB, regardez dans l'onglet Discussion pour mon travail sur l'exécution dans C# MVC.

Je travaille avec l'auteur sur une meilleure implémentation qui protège les données d'appartenance (mot de passe, date de dernière connexion, toutes les données non autorisées) mais qui permet de mapper et d'étendre la table utilisateur. Mais ce n'est pas encore prêt!

Questions connexes