2016-04-19 3 views
1

Ich habe eine EDMX (Entity Framework 6.1.3), die ich verwende, um zwei verschiedene Datenbanken abzufragen. Es gibt einige kleine Unterschiede zwischen den Datenbanken, aber ich möchte nur die gemeinsamen Spalten. Ich generierte das EDMX aus Datenbank A und entfernte die Spalten, die nicht in Datenbank B waren, aus dem Diagramm und generierte den Code neu.EF 6 Abfrage enthält nicht zugeordnete Spalten, die die Abfrage brechen

Wenn ich Datenbank B abfrage, enthält die Abfrage die Spalten, die ich entfernte, obwohl das letzte SELECT nicht. Dies bedeutet, dass die Abfrage fehlschlägt.

Die Tabellenzuordnung zeigt die Spalten, aber mit nichts auf dem Wert/Objektseite:

Removed properties from mapping

Die Ausnahme ist:

System.Data.Entity.Core.EntityCommandExecutionException : An error occurred while executing the command definition. See the inner exception for details. 
    ----> System.Data.SqlClient.SqlException : Invalid column name 'ValidFromDate'. 
Invalid column name 'ValidToDate'. 
Invalid column name 'LastPulled'. 
Invalid column name 'IsCurrent'. 

Die Abfrage, die an den Server gesendet wird ist:

SELECT TOP (1) 
[c].[FirstName] AS [FirstName], 
[c].[LastName] AS [LastName], 
[c].[HomePhone] AS [HomePhone], 
[c].[WorkPhone] AS [WorkPhone], 
[c].[MobilePhone] AS [MobilePhone], 
[c].[Email] AS [Email], 
[c].[Fax] AS [Fax] 
FROM (SELECT 
[Person].[FirstName] AS [FirstName], 
[Person].[LastName] AS [LastName], 
[Person].[HomePhone] AS [HomePhone], 
[Person].[WorkPhone] AS [WorkPhone], 
[Person].[MobilePhone] AS [MobilePhone], 
[Person].[Email] AS [Email], 
[Person].[Fax] AS [Fax], 
[Person].[ValidFromDate] AS [ValidFromDate], 
[Person].[ValidToDate] AS [ValidToDate], 
[Person].[LastPulled] AS [LastPulled], 
[Person].[IsCurrent] AS [IsCurrent] 
FROM [dbo].[Person] AS [Person]) AS [c] 

Wie Sie sehen können, gibt es eine innere Abfrage, die die zusätzlichen Spalten enthält.

An diesem Punkt bin ich irgendwie ratlos, warum das passiert. Wie entferne ich diese Spalten von beiden Seiten des Mappings oder verhindere sonst, dass EF unerwünschte Spalten in irgendeinen Teil der Abfrage legt?

Antwort

1

Dank @ Borophyll für mich in etwa die richtige Richtung zeigen. Obwohl ihre Antwort nicht die Lösung für mein Problem war, erlaubte es mir, das eigentliche Problem zu sehen.

in der EDMX-Datei gibt es auch einen Eintrag, der wie folgt aussieht:

<EntitySet Name="Person" EntityType="Self.Person" store:Type="Tables" store:Schema="dbo"> 
    <DefiningQuery>SELECT 
    [Person].[FirstName] AS [FirstName], 
    [Person].[LastName] AS [LastName], 
    [Person].[HomePhone] AS [HomePhone], 
    [Person].[WorkPhone] AS [WorkPhone], 
    [Person].[MobilePhone] AS [MobilePhone], 
    [Person].[Email] AS [Email], 
    [Person].[Fax] AS [Fax], 
    [Person].[ValidFromDate] AS [ValidFromDate], 
    [Person].[ValidToDate] AS [ValidToDate], 
    [Person].[LastPulled] AS [LastPulled], 
    [Person].[IsCurrent] AS [IsCurrent] 
    FROM [dbo].[Person] AS [Person]</DefiningQuery> 
</EntitySet> 

Und das ist, wo die seltsame Unter Abfrage kommen würde. Ich denke der Grund ist, dass die Tabelle keinen Primärschlüssel hat, da sie Teil einer Staging-Datenbank ist.

Ich habe gerade aus der SELECT Anweisung die letzten vier Spalten gelöscht und alles hat funktioniert.

+0

Interessant - ich habe diese gesehen, wenn ich eine Ansicht in eine EDMX-Datei einfüge, ich kann mich nicht erinnern, eine auf einer Tabellendefinition zu haben. Toller Fund - froh, dass Sie Ihr Problem lösen konnten! – Borophyll

1

Wenn Sie den EDMX-Designer verwenden und einfach eine Spalte aus einer Entität löschen, wird die Spalte nicht vollständig aus dem EDMX entfernt. Angenommen, Sie möchten es wirklich weg, können Sie die EDMX-Datei mit einem Texteditor öffnen und es von Hand entfernen. Um sicherzustellen, dass Ihre manuellen Änderungen eine Neuerstellung Ihrer automatisch generierten Klassen auslösen, bearbeiten Sie sie in Visual Studio und Sie sollten kein Problem haben. die EDMX in Lösung Explorer

  • Öffnen mit ...
  • XML (Text) Editor
    1. Rechtsklick auf mich erwarten würde, wenn Sie die EDMX öffnen sind, würden Sie feststellen, etwas, das wie folgt aussieht:

      Und Sie würden nur die unteren 4 Spalten entfernen, speichern und schließen und das Projekt neu erstellen.

      EDIT: Wenn jemand in Zukunft auf diese Antwort verweist, wenn Sie nicht zuerst die Spalte im Designer löschen (wie das OP in diesem Fall), wird es zwei weitere Instanzen der Spalte (n) geben das XML, das Sie auch entfernen müssen, damit es kompiliert werden kann.

    Verwandte Themen