Mein Problem scheint einfach zu sein, aber ich kann nicht herausfinden, was passiert.LINQ gibt falschen Wert für eine bestimmte Spalte in SQL View-Abfrage
Ich habe die folgende LINQ-Abfrage:
(from p in db.VW_PROJETOS
join ic in db.vw_InstanciaCarteira
on p.CodigoProjeto equals ic.CodigoProjeto
where ic.CodigoCarteira == 125
orderby p.CodigoProjeto
select p).ToList();
Es gibt 9 Einträge aus VW_PROJETOS, wie IDs, FKs, string, Termine ... Wenn ich dieselbe Abfrage in SQL Server Management Studio ausführen, da die folgende
select * from VW_PROJETOS p
inner join vw_InstanciaCarteira ic on p.CodigoProjeto = ic.CodigoProjeto
where ic.CodigoCarteira = 125
order by p.CodigoProjeto
es wird die gleichen 9 Einträge, mit den gleichen Daten für jeden Eintrag, außer für die Spalte "Desempenho". Hier ist ein kurzes Beispiel:
SQL Server gibt:
CodigoProjeto NomeProjeto Desempenho
13 Projeto 1 Satisfatório
1247 Projeto 2 NULL
1435 Projeto 3 Crítico
LINQ Abfrage zurückgibt:
CodigoProjeto NomeProjeto Desempenho
13 Projeto 1 Crítico
1247 Projeto 2 Crítico
1435 Projeto 3 Satisfatório
Ich sah einige Beispiele für ROW_NUMBER
Verwendung von Indizes für die Ansichten zu erstellen, um LINQ zu helfen sich nicht selbst zu verlieren, wenn ich mit Ansichten arbeite, aber ich konnte es nicht richtig machen (der Index, der in der SQL-Abfrage angezeigt wurde, unterschied sich immer von dem von LINQ zurückgegebenen Index).
Ist das ein häufiges Problem? Ist es leicht zu korrigieren oder zu umgehen? Es kann ein Fehler in der Ansicht selbst sein?
EDIT:
einige Ihrer Ratschläge Folgen, überprüfte ich die Beziehung zwischen eindeutigen Schlüssel und Feldern in Entitäten Entity Framework. Ich habe mehrere Schlüssel, richtig geordnet, in beide EF-Einheiten eingegeben, aber das Ergebnis war das gleiche. Ich habe die SQL-Abfrage von meinem LINQ generiert und es gibt genau das gleiche Ergebnis wie das, das ich oben gepostet habe. Ich habe die Modelle auch wieder mit Code-First aus der Datenbank generiert, um die Schlüssel nach der Code-Generation zu sortieren, und sie war auch nutzlos.
'VW_PROJETOS' ist eine Datenbankansicht, richtig? Dies ist ein bekanntes EF-Problem mit Sichten, für die kein PK definiert ist. –
@ ivan-stoev Ja, es ist eine Ansicht. Was ist der beste Weg, um eine PK in einer Ansicht zu definieren? Ich habe es noch nie zuvor gemacht. – thiagoprzy
@ ivan-stoev BTW, ist es wirklich eine PK? Ich suche danach und es scheint, dass Ansichten keine PKs, nur Indizes haben können. – thiagoprzy