2
我有一個包含(可能)長字符串列的表,這樣可以避免在LINQ查詢期間需要拉入整個字符串來檢查長度,我創建在表中計算列使用公式稱爲HasContent:Linq查詢報告EF4.2中計算列上的'無效列名'
(case when len([Html])>(0) then CONVERT([bit],(1),0) else CONVERT([bit],(0),0) end)
產生一個布爾(又名SQL 位)結果。
在數據庫中的第一EF4.2 EDMX文件,我得到的SSDL內容:
<Property Name="HasContent" Type="bit" StoreGeneratedPattern="Computed" />
在CSDL內容:
<Property Type="Boolean" Name="HasContent" Nullable="false" annotation:StoreGeneratedPattern="Computed" />
,並在CS-映射:
<ScalarProperty Name="HasContent" ColumnName="HasContent" />
我在EF中使用DbContext而不是ObjectContext,並且類包含(沒有任何註釋)布爾型本身Ty爲HasContent。
爲了測試我創建了一個簡單的LINQ查詢:
var objContentItem = objDataContext.FirstOrDefault(x => x.ID == 2);
解決方案編譯沒有錯誤,但在執行上面的查詢將引發一個錯誤:
System.Data.EntityCommandExecutionException: An error occurred while executing the command definition. See the inner exception for details. ---> System.Data.SqlClient.SqlException: Invalid column name 'HasContent'.
相當爲什麼發生這種情況是神祕,但我想知道是否還有別的東西我應該做(例如,在一個好友類中註釋),以使該列對LINQ可見。
編輯:
SQL Server事件探查BatchCompleted結果:
SELECT TOP (1)
[Extent1].[ID] AS [ID],
[Extent1].[Html] AS [Html],
[Extent1].[HasContent] AS [HasContent]
FROM [dbo].[ContentItems] AS [Extent1]
WHERE 2 = [Extent1].[ID]
你可以檢查生成的SQL查詢(與一些分析器)並將其添加到您的問題?還要確保你正在查詢正確的數據庫。 – 2012-01-06 12:53:59
Ladislav - 我追加了SQL Profiler輸出。我認爲它沒有正確地觸及數據庫,所以使用探查器是有益的。 – CrispinH 2012-01-06 14:58:29
HasContent/blnHasContent?該列不在該數據庫的表中,它是一個常規的SQL異常。也許這是一個不同的數據庫實例? – 2012-01-06 21:18:22