2014-12-22 4 views
1

DB 접근 방식을 통해 Entity Framework MVC5에서 작업 중입니다. 데이터베이스로 MySQL을 사용합니다. 내가 프로 시저를 만들 때 호출 절차 내 기대대로 작동합니다. 내가 MVC에서 절차를 사용하지만 그것은스토어 프로 시저가 MVC5에서 값을 반환하지 않습니다.

CREATE PROCEDURE `checkSeasonAvailability`( 
    IN paramSeasonId INT, 
    IN paramHotelId INT, 
    IN paramStartDate varchar(20), 
    IN paramEndDate varchar(20) 
) 
BEGIN 
    DECLARE _startDate,_endDate DATETIME; 
    DECLARE _hotelseasonID BIGINT(20); 
    DECLARE _count,_rowCount,_dateDiff INT; 
    DECLARE _index INT DEFAULT 1; 
    DECLARE i INT DEFAULT 0; 
    DECLARE cursorSeasonList CURSOR FOR SELECT `hotel_season_id`,`start_date`,`end_date` 
      FROM hotel_season_link 
      WHERE hotel_id = paramHotelId  && 
        season_id = paramSeasonId  && 
        active  = TRUE; 
    OPEN cursorSeasonList; 
    SET _rowCount=FOUND_ROWS(); 
    SET _count=_rowCount; 
    IF(_rowCount>0) THEN      
     Proc:WHILE _index <= _rowCount DO 
      FETCH cursorSeasonList INTO _hotelseasonID,_startDate,_endDate; 
      SET _dateDiff=datediff(paramEndDate,paramStartDate); 
      SET i=0; 
      WHILE i <= _dateDiff DO 

       SELECT COUNT(*) FROM hotel_season_link 
       WHERE 
         adddate(paramStartDate,i) BETWEEN _startDate AND _endDate INTO _count; 

       IF(_count>0) THEN 
        SELECT 1; 
        LEAVE Proc;  
       END IF; 
       SET i=i+1; 
      END WHILE; 
     SET _index=_index+1; 
     END WHILE; 
    END IF;  
END 

CALL checkSeasonAvailability(1,3,'2014-12-26 00:00:00','2014-12-31 00:00:00');//call in mysql 

컨트롤러

String format = "yyyy-MM-dd hh:mm:ss"; 
var status = db.checkSeasonAvailability(seasonId, hotelId, startDate.ToString(format), endDate.ToString(format)); 

난 내 코드를 디버깅 할 때 내가 필요한 모든 매개 변수가 성공적으로 보내 찾을 때마다 0

저장 프로 시저를 반환 그러나 나는 반환 가치를 얻지 않았다. 내 코드에 문제가 있으면 제게 제안하십시오.

+2

확인이 능숙 아웃 : http://sunali.com/2012/10/10/querying-mysql-using-entity-framework-and-mysql-stored-procedures/ HTTP ://stackoverflow.com/questions/1011062/using-the-entity-framework-with-a-mysql-db-and-the-model-designer-doesnt-pickup – MichaelCleverly

+0

감사합니다. @MichaelCleverly – Anjyr

답변

1

나는이 문제를 혼자서 해결합니다. 점포 수속이나 액션 수법을 변경합니다.

내 프로 시저에서 하나 이상의 매개 변수를 OUTPUT으로 추가하고이 변수에 반환 값을 저장하십시오.

OUT Flag int 

SET Flag=0; 
SELECT Flag; 

그런 다음 조치 방법을 변경하십시오.

String format = "yyyy-MM-dd hh:mm:ss"; 
System.Data.Entity.Core.Objects.ObjectParameter flag = new System.Data.Entity.Core.Objects.ObjectParameter("flag", typeof(int)); 
var status = db.checkSeasonAvailability(hotelSeasonId,seasonId, hotelId, startDate.ToString(format), endDate.ToString(format), flag); 
관련 문제