2012-01-06 69 views
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] 
+0

你可以檢查生成的SQL查詢(與一些分析器)並將其添加到您的問題?還要確保你正在查詢正確的數據庫。 – 2012-01-06 12:53:59

+0

Ladislav - 我追加了SQL Profiler輸出。我認爲它沒有正確地觸及數據庫,所以使用探查器是有益的。 – CrispinH 2012-01-06 14:58:29

+0

HasContent/blnHasContent?該列不在該數據庫的表中,它是一個常規的SQL異常。也許這是一個不同的數據庫實例? – 2012-01-06 21:18:22

回答

0

表應FirstOrDefault方法之前被包括在內。

var objContentItem = objDataContext.Tablename.FirstOrDefault(x => x.ID == 2);