본문 바로가기

DB/Entity Framework

error CS1061: 'int' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)



error CS1061: 'int' does not contain a definition for 'ToList' and no extension method 'ToList' accepting a first argument of type 'int' could be found (are you missing a using directive or an assembly reference?)

1. 원인

entoty framework 에 매핑 한 stored procedure 가 model 을 제대로 생성 할 수 없을때 발생하는 오류입니다.

1-1. 예

sp 내부에 #TEMP 테이블 join이나 select 가 있으며 list 로 가져올 컬럼을 매핑 할 수 없을 때 발생합니다.

즉,

var onbidObjectList = context.CompareBidObjectS(firstCategory
, secondCategory
, thirdCategory
, startDate
, endDate
, sidoCode
, gugunCode
, dongCode
, minPrice
, maxPrice
, area
, roomCount
, parsePage
, parseOffset).ToList();

onbidObjectList 의 데이터 타입은 int이며 int 만 반환하므로 ToList() 를 생성하지 않은 겁니다.

sql management 쿼리창에서

EXEC dbo.CompareBidObjectS @firstCategory = '1' ....

을 실행하면 정상적으로 컬럼명이 보여지나 실제로 entity framework이 모델을 매핑 할 때는 #Temp 테이블은 정적인 테이블이 아니므로 매핑하지 못하고 실행 결과인 int 값을 반환하는 형태로 생성합니다.

1-2. 해결방법

sp 내에 반환하는 컬럼명을 무조건 반환하는 구문을 심어줍니다.

IF (1 = 2)
BEGIN
SELECT CAST(NULL AS BIGINT) AS rowNum
, CAST(NULL AS NVARCHAR(20)) AS imagePath
, CAST(NULL AS NVARCHAR(20)) AS detailPath
, CAST(NULL AS NVARCHAR(50)) AS price
, CAST(NULL AS NVARCHAR(20)) AS dong
, CAST(NULL AS NVARCHAR(50)) AS remark
, CAST(NULL AS INT) AS PBCT_NO
, CAST(NULL AS INT) AS PLNM_NO
, CAST(NULL AS VARCHAR(20)) AS CLTR_MNMT_NO
WHERE 1 = 2
END



물론 반환하는 테이터 타입을 정확하게 맞춰서 적어줍니다.

(해당 구문은 #Temp 테이블 CREATE 앞에 있어야 합니다. )

1-3. 확인 방법

Model Browser > xxxx.Model > Complex Types > 해당sp_Result 클래스가 생성되었는지 확인 가능.


2.예

sp 자체에 오류가 있고 객체 참조에 오류가 있을때 입니다.