2011-08-03 71 views
3

由於未知原因,我正面臨此問題,並且我嘗試了每個論壇和博客來解決此問題,但無法得到任何滿意的答案。'yyy'上的xx'屬性不能設置爲'String'值。您必須將此屬性設置爲類型爲'Int32'的非空值

讓我來描述一下這個場景。

我在數據庫中有一個視圖,它包含兩個表中的列。沒有一個表的數據類型爲「int」,因此得到的視圖(我們的名字是「MyRecord」)也沒有任何具有「int」數據類型的列。視圖中的所有列都將varchar作爲數據類型。

現在,在我的.edmx中,我添加了這個視圖,並創建了模型(名稱爲「MyRecord」),所有屬性都使用數據類型「String」創建。我正在使用Silverlight和RIA服務,在建立應用程序之後,相關的代理也可以很好地創建而不會造成任何困難。

當我嘗試使用我的域上下文來查詢「MyRecord」時,出現以下錯誤。

查詢'GetMyRecords'的加載操作失敗。 「MyRecord」上的'CenterCode'屬性不能設置爲'String'值。您必須將此屬性設置爲「Int32」類型的非空值。

從錯誤中可以看出,顯然迫使我將「字符串」列「CenterCode」的數據類型轉換爲「Int32」,這對我來說是完全無用的和不必要的。 「String」或「varchar」列存在是因爲它們具有一些業務重要性,將它們更改爲「Int32」或「int」可能會在將來破壞應用程序。它的確如此,「CenterCode」列中只有數字數據,但將來可能會有字符數據,這就是爲什麼它使用'varchar'數據類型創建的原因。

因爲EF不支持,我無法更改我的數據類型。

我使用了sql server profiler,查詢正在執行正確,我可以在SSMS中運行相同的查詢而沒有任何錯誤。只有當EF從查詢返回的數據構建對象時,該錯誤纔會出現在應用程序中。

我不明白爲什麼Entity Framework會拋出這個錯誤,它根本就不會將「varchar」轉換爲「String」,並且不必要地將「Int32」帶入圖片並使生活變得困難。自從最近4小時以來,我一直在努力解決這個問題,並盡了一切可能的辦法來解決這個問題,但一切都是依靠的。

請提供一些信息或解決方案,如果任何人有。

英孚團隊,您必須對此問題有一些答案或解決此問題。

回答

1

不知道你是否解決了這個問題,但是我在使用EF處理多個結果集時遇到了類似這樣的問題。在我的情況下,我有reader.NextResult(),這對我造成了一個問題,因爲我沒有讀取以前結果中的所有記錄,並且我認爲EF由於試圖將數據從第二個結果集映射到第一個對象而失敗。

2

我與double數據類型有同樣的問題。

解決方案

更改您的視圖/程序和轉換列,如:cast(columnname as int32)

+3

我想知道,即使這個工程,它是如何有意義?從我所瞭解的問題開啓者說他的表不包含任何int數據類型,並應該都是varchar。爲什麼要鑄造爲int32需要?或者說,如果沒有任何字段是整數,EF爲什麼試圖將int納入方程?我有同樣的問題,但也有雙倍的問題,我試圖弄清楚發生了什麼事情。 – dtc

1

CAST(columnName as Type)解決我的存儲過程中的問題。

相關問題