2013-01-18 48 views
2

我有兩個DB兩個相同的程序,由同我的意思是:兩個程序具有相同名稱和選擇類型,但EF抱怨不兼容的數據讀寫

  • 同名
  • 相同的參數名稱&型
  • 結束選擇返回相同的列類型&名稱(如果我把它放在一個SELECT ... INTO table它會生成完全相同的表)。

唯一不同的是構建最終選擇的sql查詢的代碼。 如果我使用EF上的數據庫1它按預期工作,但如果我上運行數據庫2的代碼它結束錯誤:我使用

The data reader is incompatible with the specified 'Ctx.Procedure_Result'. A member of the type, 'FooId', does not have a corresponding column in the data reader with the same name.

  • 實體框架4.2
  • Visual Studio 2010中
  • 的Sql Server 2008 R2的

我沒有EF內部的足夠知識理解爲什麼發生這種情況。 我的想法是,必須有一些列類型/名稱嗅探機制,它不嗅探相同的東西。

編輯1:

的過程不會「迴歸」表類型,它只是「選擇」一些行。 該選擇結果被映射到EDMX中的ComplexType。

隨時索取更多詳情。

+0

發佈相關代碼的相關部分?還查詢和表? – Matthew

+0

在選定的記錄集中有'FooId'列 - 正如你可以在例外中看到的那樣,這是缺少的列。如果你在存儲過程中有一些邏輯,可能會發生另一件事情,那就是你可能沒有返回結果(而不是空記錄集),這意味着你根本沒有列。使用Sql Profiler跟蹤由EF發送到「不起作用」的數據庫的查詢並手動運行查詢並查看結果。我有一種感覺,你在兩個數據庫中有不同的數據,因此存儲過程的行爲有所不同。 – Pawel

+0

好的,我們的錯,建議我用SQL Server Profiler跟蹤EF查詢。事實上EF在參數中使用了NULL,這個參數銷燬了程序中的sql查詢('select ...'+ NULL => NULL) –

回答

2

我的錯,建議我用SQL Server Profiler跟蹤EF查詢。

事實上EF是在其破壞了過程內的SQL查詢的可選參數使用NULL(「選擇...」 + NULL => NULL)。

用一個空的查詢程序選擇根本沒有列,它崩潰的EF數據讀取器。

+0

保存了我的一天!謝謝 –

相關問題