2012-01-06 2 views
2

LONGQ 쿼리 중에 전체 문자열을 끌어 와야 만 길이를 확인할 수 있도록 (잠재적으로) 긴 문자열 열이 포함 된 테이블이 있습니다. 부울 (일명 SQL 비트) 결과를 생성Linq 쿼리가 EF4.2의 계산 된 열에서 '잘못된 열 이름'을보고합니다.

(case when len([Html])>(0) then CONVERT([bit],(1),0) else CONVERT([bit],(0),0) end) 

: I는 수식을 사용 HasContent라는 테이블에서 계산 된 열을 만들었다. 데이터베이스 최초 EF4.2의 edmx 파일에서

, 나는 SSDL 내용 얻을 :

<Property Type="Boolean" Name="HasContent" Nullable="false" annotation:StoreGeneratedPattern="Computed" /> 

와 CS-매핑 : 다음 CSDL 내용에

<Property Name="HasContent" Type="bit" StoreGeneratedPattern="Computed" /> 

<ScalarProperty Name="HasContent" ColumnName="HasContent" /> 

EF의 ObjectContext와 달리 DbContext를 사용하고 있으며 클래스는 (부수적 인 주석없이) 부울을 적절하게 포함합니다. HasContent를위한 ty. 나는 간단한 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 쿼리 (일부 프로파일 러 사용)를 확인하고 질문에 추가 할 수 있습니까? 또한 올바른 데이터베이스를 쿼리하고 있는지 확인하십시오. –

+0

Ladislav - SQL 프로파일 러 출력을 추가했습니다. 필자는 데이터베이스에 제대로 접근하지 못했기 때문에 프로파일 러를 사용하는 것이 좋습니다. – CrispinH

+0

HasContent/blnHasContent? 컬럼은 해당 데이터베이스의 테이블에 없으며 일반 SQL 예외입니다. 어쩌면 그것은 데이터베이스의 다른 인스턴스 였을까요? –

답변

0

표는 FirstOrDefault 방법 전에 포함되어야한다.

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

관련 문제