0
ALTER proc [dbo].[ReadReviewCountByHotelId] 
@HotelId uniqueidentifier 
AS 
-- Returns the review count for given hotel. 
BEGIN 
    SELECT Count(r.ReviewId) as ReviewCount 
    FROM Review r 
    WHERE r.Review_HotelId = @HotelId 
END; 

반환합니다. 내 프로젝트에 EF를 사용는 항상 0

public virtual ObjectResult<Nullable<int>> ReadReviewCountByHotelId(Nullable<System.Guid> hotelId) 
{ 
    var hotelIdParameter = hotelId.HasValue ? 
     new ObjectParameter("HotelId", hotelId) : 
     new ObjectParameter("HotelId", typeof(System.Guid)); 

    return ((IObjectContextAdapter)this).ObjectContext.ExecuteFunction<Nullable<int>>("ReadReviewCountByHotelId", hotelIdParameter); 
} 

public static int ReadReviewCountByHotelId(Guid? hotelId) 
{ 
    int reviewCount = 0; 
    try 
    { 
     var tEntities = new TravelEntities(); 
     Int32.TryParse(tEntities.ReadReviewCountByHotelId(hotelId).ToString(),out reviewCount);    
    } 
    catch (Exception ex) 
    { 
     throw new Exception(ex.Message); 
    } 
    return reviewCount; 
} 

EF 기능. 나는이 문제를 처음으로 본다.

감사합니다.

+0

은 그래서 레코드가이 조건'r.Review_HotelId = @ HotelId' 제공하려고 존재하지 않는 것이 분명 다른'@ HotelId' 이미 존재하는 'Review_HotelId' 열 –

답변

2

TryParse의 반환 값이 확인되지 않습니다. 다음 행이 결과를 구문 분석 할 수 없으면 false를 반환하고 0으로 초기화 된 reviewCount의 값을 변경하지 않습니다. 예외는 발생하지 않습니다. 리턴 값이 열거 /리스트 구현 래퍼 것으로 보인다 T.의 ObjectResult 같이 결과에

Int32.TryParse(tEntities.ReadReviewCountByHotelId(hotelId).ToString(),out reviewCount); 

있으며, toString() 호출은 의심스러운. 그 아마 저장된 프로 시저에서 스케일러 결과 집합의 문자열 표현을 반환하지 않습니다. 나는 라인이 더 같이해야한다고 생각하고있다 :

reviewCount = tEntities.ReadReviewCountByHotelId(hotelId).First().Value 
+0

Int32.TryParse (tEntities.ReadReviewCountByHotelId (hotelId) .FirstOrDefault() .ToString(), outCountCount); 위의 수정 작업 후 –

+0

하지만 첫 번째 또는 기본값은 Nullible 을 반환해야합니다. 문자열로 변환하고 다시 int로 변환 할 이유가 없어야합니다. – user957902

0

실제로 유효한 ID를 전달했는지 여부는 알 수 없습니다. 그러나 시도 :

설정 NOCOUNT를

에 당신의 sproc의 첫 번째 행으로? 그것은 범인이 될 수 있습니다.

일반적으로 이것을 스칼라 함수로 만드시겠습니까? 당신이하는 일에 더 적합합니다.