2つの異なるデータベースを照会するために使用しているEDMX(Entity Framework 6.1.3)があります。データベース間には若干の違いがありますが、共通の列のみが必要です。データベースAからEDMXを生成し、ダイアグラムからデータベースBにない列を削除し、コードを再生成しました。EF 6クエリにマッピングされていない列が含まれており、クエリが破損しています
データベースBをクエリすると、クエリには削除された列が含まれますが、最終的なSELECTには含まれません。これは、クエリが失敗することを意味します。
テーブル・マッピングが列を示しているが、値/プロパティの側に何も:
例外は次のとおりです。
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'.
サーバーに送信されたクエリ次のとおりです。
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]
ご覧のとおり追加の列を含む内部クエリ。
この時点で、なぜこのようなことが起こっているのかわかりません。マッピングの両側からこれらの列を削除する方法、またはEFが不要な列をクエリの任意の部分に配置しないようにする方法はありますか。
興味深い - 私はEDMXでビューを含む場合、私はテーブル定義の1つを有する覚えていないこれらを見てきました。素晴らしい発見 - あなたの問題を解決できたことをうれしく思います! – Borophyll