2009-12-09 4 views
1

Je me demande quel est le meilleur moyen de configurer l'adhésion à asp.net dans le serveur sql pour bien fonctionner avec linq to sql.Adhésion à ASP.NET et Linq à SQL

Je voudrais utiliser le champ de nom d'utilisateur pour les relations de clé étrangère et avoir linq to sql reconnaître la propriété de l'utilisateur ASP.

Je rencontre des problèmes pour établir des relations entre la table users et mes autres tables. Dois-je définir un nom d'utilisateur sur une clé primaire pour que cela fonctionne?

Répondre

4

Lorsque je l'ai fait, je laisse simplement le champ UserId dans la table aspnet_Users être la clé étrangère. Lorsque vous utilisez LinqToSql vous pouvez filtrer encore sur la base UserName en asp comme ceci:

from data in connection.MyTable 
where data.aspnet_User.UserName == User.Identity.Name 
select data; 

Ceci est en raison de la relation de clé étrangère entre la table aspnet_Users et votre propre table.

+1

Oui, c'est ce que j'ai fait aussi, a travaillé un charme. –

+0

génial, je vais donner un coup de fouet alors. –

1

La contrainte de clé primaire sur la table de base de données Utilisateurs n'a rien (ou peu) à voir avec le fournisseur d'appartenance ASP.NET. Le fournisseur d'appartenance est une classe abstraite implémentant MembershipProvider de classe abstraite définie dans System.Web.Security. Par défaut, les applications asp.net utilisent un fournisseur d'appartenance lié aux tables aspnet_XXX, mais vous pouvez écrire votre propre fournisseur qui utilisera votre propre table "Users" et y accéder via linq2sql. Al vous devez faire est de créer la classe héritant de System.Web.Security.MembershipProvider et mis en place dans web.config comme:

<membership defaultProvider="MyMembershipProvider"> 
    <providers> 
    <clear/> 
    <add name="MyMembershipProvider" type="MyNamespace.MyMembershipProvider" applicationName="MyApp"/> 
    </providers> 
</membership> 

Les méthodes que vous devez implémenter le nom d'utilisateur de la chaîne d'utilisation pour identifier les utilisateurs, mais il ne doit pas être la clé primaire de votre table. Il devrait par juste champ unique. Je pense que la bonne idée est d'utiliser INT comme clés primaires.