J'ai une table utilisateur, une table de rôles et une table de liens User2Roles. Je veux créer des entités LinqToSQL afin que je puisse accéder aux rôles de l'utilisateur en tant que role.Users et user.Roles manuellement. En utilisant concepteur, il crée en fait 3 entités, User to User2Roles et User2Roles to Roles.Comment créer de nombreuses relations dans Linq to SQL?
Répondre
Malheureusement je crois que vous êtes coincé avec cette entité intérimaire. Pour autant que je sache, Linq to SQL ne supporte pas beaucoup de jonctions de manière propre comme vous le pensez. Il existe des solutions de contournement dans le code pour que le modèle d'objet au moins apparaissent pour prendre en charge de nombreux manys comme vous le souhaitez.
Check out this post on SO
Ou cette link
Vous pouvez créer votre propre propriété dans les classes de rôle et de l'utilisateur. Le but de cette propriété est d'obtenir les utilisateurs pour le rôle actuel et de renvoyer les résultats en tant que collection. Ensuite, vous pouvez faire la même chose pour l'autre classe.
Voici une partie sans essai (sera remplacé une fois que je peux revenir à ma boîte de dev)
partial class Roles
{
List<users> Users
{
get { return User2Roles.users.toList(); }
}
}
partial class Users
{
List<roles> Roles
{
get { return User2Roles.roles.toList(); }
}
}
Vous ne pouvez pas créer en fait un grand nombre à plusieurs dans LINQ to SQL. Cependant, vous pouvez facilement créer votre propre "sucre" pour cela.
public partial class User
{
public IQueryable<Role> Roles
{
get { return UserRoles.Select(ur => ur.Role); }
}
}
public partial class Role
{
public IQueryable<User> Users
{
get { return UserRoles.Select(ur => ur.User); }
}
}
C'est à peu près tout ce qu'il y a à faire. Cela vous évitera de devoir traiter avec l'entité intermédiaire. Vous pouvez écrire un code contre elle, comme si elle était un vrai M: relation M:
foreach (Role role in user.Roles) { ... }
Vous devriez même pouvoir l'utiliser dans les projections de requêtes (bien que vous aurez probablement des problèmes à l'aide dans les filtres).
Pourquoi IEnumerable? Je rendrais les propriétés IQueryable de retour afin de retarder l'exécution ...? – Eric
@Eric: Bon point. Je pense que Linq to SQL reconnaîtrait que 'IEnumerable' implémente aussi' IQueryable', mais mieux vaut le rendre explicite. – Aaronaught
Plus j'y pense, plus je pense que tu as raison. Je suppose que IEnumerable est probablement aussi bon, puisque la requête ne s'exécutera pas tant que vous n'aurez pas déplacé l'énumérateur à une valeur réelle et que vous ne l'aurez pas lu. – Eric
- 1. Comment créer une transaction LINQ to SQL?
- 2. LINQ to SQL - Insertion des entités ayant des relations
- 3. Classes LINQ to SQL
- 4. Test LINQ to SQL
- 5. Comment créer une propriété 'ReadOnly' dans LINQ to SQL?
- 6. linq to sql: comment créer une clé dans orm?
- 7. Application LINQ to SQL
- 8. Recherche avancée dans Linq to SQL possible?
- 9. LINQ to SQL batch supprimer
- 10. Impossible de créer une méthode extesion pour LINQ to Enitities lier DeleteAllOnSubmit() dans LINQ to SQL
- 11. LINQ to SQL
- 12. Linq To SQL Beaucoup à beaucoup
- 13. Relations LINQ many-to-many: Solution?
- 14. Version de LINQ to SQL
- 15. Comment fonctionne Linq to SQL?
- 16. Comment créer LINQ to SQL Group avec condition?
- 17. Transactions dans LINQ to SQL
- 18. Comment utiliser LINQ to SQL?
- 19. LINQ to SQL - Comment "Où ... dans ..."
- 20. Sql Query to Linq To Sql
- 21. Linq to SQL Sum()
- 22. connectionstring dans LINQ to SQL
- 23. StackOverflowException dans LINQ to SQL
- 24. inheritance dans linq to sql
- 25. linq to sql "Contient"
- 26. Rechercher dans LINQ to SQL
- 27. question LINQ to SQL
- 28. Linq to SQl
- 29. LINQ to SQL Wildcards
- 30. Problème Linq to Sql
Vous savez qu'il est généralement bon d'accepter une réponse ou d'apporter des précisions si les réponses ne correspondent pas à vos attentes. – Eric