Warum führt MigrationHistory dazu, dass Linq-Ergebnisse bei der Angabe nur einer Teilmenge von Spalten abweichen?

Ich führe eine Abfrage gegen Entity Framework wie folgt durch:

var results = MyViewEntity.Where(row => row.someId == myTargetId); 

Hier repräsentiert MyViewEntity eine view in der database. Für das Ergebnis erwartete ich zwei Zeilen, bei denen die Werte in nur einer Spalte abweichen sollten. Das tatsächliche Ergebnis hat zwei Zeilen, aber alle Spalten enthalten die gleichen Werte.

Jetzt, wenn ich meine Abfrage wie folgt ändere …

 MyViewEntity.Where(row => row.someId == myTargetId) .Select(row => row.MyTargetColumnName); 

… Das Ergebnis enthält zwei verschiedene Werte, wie ich ursprünglich erwartet hatte. Wenn Sie wie folgt zusätzliche Spalten hinzufügen, werden immer noch zwei Zeilen zurückgegeben, mit Unterschieden in den erwarteten Spalten:

 MyViewEntity.Where(row => row.SomeId == myTargetId) .Select(row => new { row.MyTargetColumnName, row.SomeOtherCol, row.ThirdColumn }); 

Dadurch kann ich das Problem "beheben", indem ich einfach eine große Anzahl von Spalten in meine Abfrage einfüge. Ich würde es jedoch vorziehen, dies nicht zu tun, und ich würde gerne verstehen, was den Unterschied zwischen den beiden verursacht
Where(...) und Where(...).Select(...) .


Zusätzliche Informationen (SQL):

Ich habe versucht, dies herauszufinden, indem ich LinqPad verwende, das für jeden der LINQ-Ausdrücke das folgende SQL generiert. Der sql unterscheidet sich deutlich, aber der Grund dafür, und was genau es bedeutet, ist mir noch nicht klar. Tritt eine Art Caching im Entity Framework auf, was mein Ergebnis durcheinander bringt? In Bezug auf MigrationHistory vielleicht?

Wo (). Wählen Sie ():

 SELECT [Extent1].[MyTargetColumnName] AS [MyTargetColumnName], [Extent1].[SomeOtherCol] AS [SomeOtherCol], [Extent1].[ThirdColumn] AS [ThirdColumn] FROM [dbo].[MyViewNameInDb] AS [Extent1] WHERE 123 = [Extent1].[SomeId] 

Nur wo ():
Hinweis : Wenn Sie den letzten Teil (die endgültige select-statement) als reines SQL ausführen, werden erwartungsgemäß zwei verschiedene Zeilen zurückgegeben. Wenn Sie das Ganze als LINQ-Ausdruck ausführen, werden jedoch zwei identische Zeilen zurückgegeben:

 SELECT TABLE_SCHEMA SchemaName, TABLE_NAME Name FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' GO SELECT [GroupBy1].[A1] AS [C1] FROM ( SELECT COUNT(1) AS [A1] FROM [dbo].[__MigrationHistory] AS [Extent1] ) AS [GroupBy1] GO SELECT TOP (1) [Extent1].[Id] AS [Id], [Extent1].[ModelHash] AS [ModelHash] FROM [dbo].[EdmMetadata] AS [Extent1] ORDER BY [Extent1].[Id] DESC GO SELECT [Extent1].[FirstCol] AS [FirstCol], [Extent1].[SecondCol] AS [SecondCol], --- More clumns here, omitted for clarity.. [Extent1].[LastCol] AS [LastCol] FROM [dbo].[MyViewNameInDb] AS [Extent1] WHERE 123 = [Extent1].[SomeId] 

Solutions Collecting From Web of "Warum führt MigrationHistory dazu, dass Linq-Ergebnisse bei der Angabe nur einer Teilmenge von Spalten abweichen?"