J'essaie de comprendre pourquoi une requête simple dans LINQ renvoie des résultats impairs.Requête LINQ renvoyant plusieurs copies du premier résultat
J'ai une vue définie dans la base de données. Il rassemble essentiellement plusieurs autres tables et fait quelques manipulations de données. Ce n'est vraiment rien de spécial, sauf pour le fait qu'il traite un grand ensemble de données et peut être un peu lent.
Je souhaite interroger cette vue en fonction d'un long chemin. Deux exemples de requêtes ci-dessous montrent différentes requêtes à cette vue.
var la = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).ToList();
var deDa = Runtime.OmsEntityContext.Positions.Where(p => p.AccountNumber == 12345678).Select(p => new { p.AccountNumber, p.SecurityNumber, p.CUSIP }).ToList();
Le premier doit renvoyer une liste. Le second sera une liste d'objets anonymes.
Lorsque je fais ces requêtes dans le framework d'entités, le premier me renvoie une liste de résultats où ils sont tous exactement les mêmes.
La deuxième requête me renvoie des données où le numéro de compte est celui que j'ai interrogé et les autres valeurs diffèrent. Cela semble se faire par numéro de compte, c'est-à-dire que si je demandais un numéro de compte ou un autre, tous les objets Position d'un compte auraient la même valeur (le premier dans la liste des Positions pour ce compte) et le deuxième compte aurait un ensemble d'objets Position ayant tous la même valeur (encore une fois, le premier dans sa liste d'objets Position).
Je peux écrire SQL qui est en fait le même que l'une des deux requêtes EF. Ils reviennent tous les deux avec des résultats (disons quatre) qui montrent les données correctes, un numéro de compte avec différents numéros de titres.
Pourquoi cela se produit-il ??? Y a-t-il quelque chose que je pourrais faire de mal, alors si j'avais quatre résultats pour la première requête ci-dessus, les données du premier enregistrement apparaîtraient également dans les objets du 2-4ème?
Je n'arrive pas à comprendre ce qui pourrait ou pourrait causer cela. J'ai cherché Google pour toutes sortes de mots-clés et je n'ai vu personne avec ce problème. Nous classons partiellement la classe Positions pour des fonctionnalités supplémentaires (objet intelligent) et certaines propriétés intelligentes. Il y a même quelques constructeurs qui fournissent un support de type de modèle de vue. Rien de tout cela n'est invoqué dans la demande (j'en suis sûr à 99%). Cependant, nous faisons ce même modèle partout dans l'application.
La seule chose que je peux penser est que le mappage dans l'EDMX est vicieux. Y a-t-il un moyen que cela se produise si les «clés primaires» de l'EDMX n'étaient pas en fait uniques compte tenu de la façon dont la vue est construite? Je pense que les développeurs qui ont importé ce modèle dans l'EDMX ont laissé le concepteur sélectionner automatiquement ce qui serait unique.
Toute aide donnerait un peu d'espoir à un devin haggered!
Saisissez le script SQL généré et exécutez-le de manière interactive dans Management Studio pour voir ce qui se passe réellement –
Comme indiqué, utilisez peut-être un profileur pour examiner le SQL en cours d'exécution. –