0

不兼容,因此還有一些其他類似的類型帖子,但沒有匹配我嘗試的簡單任務。 剛剛經歷EF6代碼運行一個存儲過程第一以下方式數據讀取器與指定的類

var results = context.DataBase.SqlQuery<MyClass>("exec spGetStuff @param1, @param2", new SqlParameter[] {new SqlParameter("param1",value), new SqlParameter("param2", value2)}); 

我已經使用這個方法上沒有問題多次。 我將結果映射到許多屬性非常令人討厭,但所有需要它的都標有[Column("dbfieldname")]屬性。

所有的存儲過程做的是通過使用

SELECT * FROM(
SELECT 
    ROW_NUMBER() OVER (PARTITION BY X,Y,Z ORDER BY A) [RowNumber] 
,* 
FROM 
MyTableNAme 
WHERE 
...) S 
WHERE s.RowNumber = 1 

不插入,更新或任何幻想類似的返回了一定的成效。

數據讀取器與指定的'MyClass'不兼容。類型'PropertyNameName'的成員在數據閱讀器中沒有相應的列,名稱相同。

如果我確實將類屬性更改爲數據庫列名,它似乎工作正常:我可以更改前幾個屬性,然後它會在類中的其他失敗...但是我不真的想要這樣做,如果我可以避免它,因爲數據庫中的大多數列的名稱確實非常糟糕,所以我想我的問題是爲什麼它忽略了以前從未讓我失敗的[Column()]屬性。 或問題row_number,我已嘗試添加到類中或從查詢結果集中刪除。

回答

0

自從EF6升級並重構EF6以來,我們也看到了這個問題。存儲過程返回並且我們在edmx中定義了一個複雜類型。似乎一切都符合了,但在嘗試了幾件事情,這是我發現後,那麼調用這樣

return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<GetColumnValueSet_Result>("GetColumnValueSet", param1, param2, param3); 

,當我們得到相同類型的錯誤。我打開我的edmx並進入Visual Studio中的模型瀏覽器。在函數導入下,我找到了我的sproc。右鍵單擊並選擇功能導入映射。事實證明,即使複雜類型是正確的,並且它看起來應該與功能導入映射匹配,但是認爲該sproc正在返回一個名爲CodeValue而不是Value(它實際上是導入的)的列。

因此,出於某種原因,當獲取了sproc列時,它會爲映射輸入錯誤的名稱。

+0

嗨,感謝您的回覆。我沒有說清楚我是先使用代碼,所以沒有edmx對我來說。最終導致sproc中的所有列都走樣,這遠非理想。 :( – nat 2014-09-02 14:49:41

相關問題