Linq查询报告&x27;无效的列名';关于EF4.2中的计算列

Linq查询报告&x27;无效的列名';关于EF4.2中的计算列,linq,entity-framework,Linq,Entity Framework,我有一个包含(可能)长字符串列的表,因此为了避免在LINQ查询期间为了检查长度而必须拉入整个字符串,我使用以下公式在表中创建了一个名为HasContent的计算列: (case when len([Html])>(0) then CONVERT([bit],(1),0) else CONVERT([bit],(0),0) end) 这将生成布尔(也称为SQL位)结果 在数据库的第一个EF4.2 edmx文件中,我得到了SSDL内容: <Property Name="HasConte

我有一个包含(可能)长字符串列的表,因此为了避免在LINQ查询期间为了检查长度而必须拉入整个字符串,我使用以下公式在表中创建了一个名为HasContent的计算列:

(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" />
<Property Type="Boolean" Name="HasContent" Nullable="false" annotation:StoreGeneratedPattern="Computed" />
解决方案编译时没有错误,但执行上述查询会引发错误:

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'.
为什么会发生这种情况是个谜,但我想知道是否还有其他事情我应该做(例如在buddy类中进行注释),以使这个专栏对LINQ可见

编辑:

SQL Server探查器批处理完成结果:

SELECT TOP (1) 
[Extent1].[ID] AS [ID], 
[Extent1].[Html] AS [Html], 
[Extent1].[HasContent] AS [HasContent]
FROM [dbo].[ContentItems] AS [Extent1]
WHERE 2 = [Extent1].[ID]

表应包含在FirstOrDefault方法之前


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

表应在FirstOrDefault方法之前包含


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

您能检查生成的SQL查询(使用一些分析器)并将其添加到您的问题中吗?还要确保您查询的是正确的database.Ladislav-我已经附加了SQL分析器输出。我认为它没有正确地接触到数据库,因此使用profiler是有指导意义的。HasContent/blnHasContent?该列不在该数据库的表中,它是一个常规SQL异常。也许这是数据库的另一个例子?这是我的一个失误:我删掉了匈牙利语的前缀,我通常用这些前缀来让普通人更清楚地回答这个问题。现在,我已经将问题中剩下的两个blhHasContent实例更改为hascantent。SQL查询是运行(例如,通过ManagementStudio运行int)还是产生相同的错误?作为旁注,您应该能够使用normallength属性在LINQ查询中引用字符串的长度。我认为计算列方法没有任何好处。您能检查生成的SQL查询(使用一些分析器)并将其添加到您的问题中吗?还要确保您查询的是正确的database.Ladislav-我已经附加了SQL分析器输出。我认为它没有正确地接触到数据库,因此使用profiler是有指导意义的。HasContent/blnHasContent?该列不在该数据库的表中,它是一个常规SQL异常。也许这是数据库的另一个例子?这是我的一个失误:我删掉了匈牙利语的前缀,我通常用这些前缀来让普通人更清楚地回答这个问题。现在,我已经将问题中剩下的两个blhHasContent实例更改为hascantent。SQL查询是运行(例如,通过ManagementStudio运行int)还是产生相同的错误?作为旁注,您应该能够使用normallength属性在LINQ查询中引用字符串的长度。我认为计算列方法没有任何好处。
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'.
SELECT TOP (1) 
[Extent1].[ID] AS [ID], 
[Extent1].[Html] AS [Html], 
[Extent1].[HasContent] AS [HasContent]
FROM [dbo].[ContentItems] AS [Extent1]
WHERE 2 = [Extent1].[ID]