Liaison de relations multiples avec EntityDataSource

.net asp.net entity-framework entity-relationship

Question

J'ai un modèle de données d'entité ADO .Net pour ma base de données. Dans ce modèle, j'ai trois tables liées: "Utilisateurs" Table contenant UserId et d'autres détails. "Run" Table contenant RunId, ApproverId et d'autres détails "RunToUser" contenant les colonnes UserId et RunId

Les relations sont les suivantes: Utilisateurs.UserId est une relation un à un avec Run.ApproverId. User.UserId est plusieurs en beaucoup avec RunToUser.UserId. Run.RunId est plusieurs en plusieurs avec RunToUser.RunId

Dans le modèle d'entité, cela est exprimé sous forme de deux tables avec 2 relations distinctes. la relation un-à-un et la relation plusieurs-à-plusieurs entre utilisateurs et Exécuter.

J'ai un ASP.net Formview où je veux éditer les données dans Exécuter ainsi que les données associées dans Utilisateurs.

La liaison de données fonctionne dans la plupart des cas. Cependant, lorsque je me lie à la table Users en tant que entitydatasource, elle utilise toujours l'association de relation un-à-un.

Comment puis-je forcer la base de données entitydatasource à utiliser une association de relation spécifique afin que je puisse lier les données du mappage un à un à une étiquette et du multi-plusieurs à un affichage de données?

J'ai essayé le "EXISTS" dans la clause where qui limite les enregistrements, mais il insiste toujours pour toujours utiliser le one-to-one et affiche uniquement l'utilisateur unique dans tous les contrôles databound. Voici le entitydatasource pour les utilisateurs:

  <asp:EntityDataSource ID="edsUsers_DET" runat="server" 
        ConnectionString="name=MyEntities" DefaultContainerName="MyEntities" 
        EntitySetName="Users" 
        Where="EXISTS(SELECT VALUE p FROM it.Run AS p WHERE p.RunID = @RunID)" >
        <WhereParameters>
           <asp:ControlParameter ControlID="fvRun"  Name="RunID" Type="Int32" />
        </WhereParameters>        
    </asp:EntityDataSource>

Je suppose que j'aurai besoin de deux sources de données d'entité, une pour l'étiquette et une seconde pour gridview, mais jusqu'à ce que je sache comment spécifier une association, je ne sais pas comment procéder. Thx, -J

Réponse acceptée

Je fais un suivi depuis que j'ai trouvé la réponse et oublié de fermer la question.

J'ai découvert que lorsque vous avez plusieurs associations avec la même table étrangère, elles obtiennent un suffixe numérique par défaut. Donc, Run table avait une association Utilisateurs et Utilisateurs1. Lorsque vous utilisez le paramètre "Inclure" pour l'EDS, vous devez savoir quelle association utiliser n'est pas évidente jusqu'à ce que vous regardiez dans le modèle EDS.

Je suis allé penser à renommer toutes mes associations qui portaient les suffixes numériques. Ma table Run comporte maintenant une association Utilisateurs et Approbateur (au lieu de Utilisateurs1). Cela me permet de déchiffrer facilement les relations à inclure pour LINQ et les parties déclaratives EDS.

Si je voulais inclure les deux associations pour l'EDS, je ferais quelque chose comme:

Include="Users,Approver"

J'espère que cela aide quelqu'un d'autre car ce n'était pas très évident pour moi au début.


Réponse populaire

Si votre base de données contient une relation un-à-un, vous pouvez créer votre modèle d'entité de sorte que ces deux tables apparaissent sous la forme d'une table unique dans votre modèle d'entité.

Si vous le construisez comme ceci, votre liaison devient beaucoup plus simple.



Related

Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow