2013-05-22 3 views
2

PetaPOCO와 함께 CTE를 사용하고 있으며 데이터가 매핑되어야하는 모델을 참조하는 이상한 오류
SQL Exception: Invalid Object Name PayTransactionForRollingVacationAverage이 발생합니다.PETAPOCO - 유효하지 않은 개체 이름

코드는 다음과 같습니다.

public class PayTransactionForRollingVacationAverage 
    { 
     public long EmployeeId { get; set; } 
     public DateTime PayEndDate { get; set; } 
     public string JobClass { get; set; } 
     public string AverageRateCode { get; set; } 
     public decimal RegularHours { get; set; } 
     public decimal RegularRate { get; set; } 
     public decimal RegularAmount { get; set; }   
    } 

내가 제대로 구축했다 확인하기 위해 SQL을 깨는 시도,하지만 난 여전히 오류가 발생합니다 :

public IEnumerable<PayTransactionForRollingVacationAverage> GetPayTransactionForRollingVacationAverage(DateTime payEndingDate) 
    { 
     PointsNorth.PetaPoco.Sql sql = new PointsNorth.PetaPoco.Sql(); 
     sql.Append(@" 
      ;with HolidayWeeks as 
      (
       Select Distinct EmployeeId, PayEndDate, 'Y' as HolidayWeek 
        from PayTransactions 
       where PayEndDate = @payEndingDate 
        and LaborCode in ('251', '249') 
      )", new { payEndingDate }); 

     sql.Append(@" 
      Select 
       PT.EmployeeId, 
       PT.PayEndDate, 
       J.JobClass, 
       PayCodes.AverageRateCode, 
       PT.RegularHours, 
       PT.RegularRate, 
       PT.RegularAmount      
       from PayTransactions PT 
       Left Outer Join PayCodes on PayCodes.PayCodeCode = PT.LaborCode 
       Left Outer Join HolidayWeeks as H on H.PayEndDate = PT.PayEndDate and H.EmployeeId = PT.EmployeeId 
       Inner Join Jobs as J on J.JobId = PT.JobId 
      where PT.PayEndDate = @payEndingDate 
       and IsNull(H.HolidayWeek, 'N') <> 'Y' 
      order by PT.EmployeeId, PT.PayEndDate, J.JobClass", new { payEndingDate }); 

     var data = Database.Query<PayTransactionForRollingVacationAverage>(sql); 

     return data; 
    } 

모델

은 아주 간단합니다. 왜 이런 일이 일어나는 지 아십니까?

+0

SQL은 정상적으로 보입니다 - SQL Server에 있습니까? – Rikalous

+0

내 대답을 받아 들일 수 있습니까? 그것은 두 번 나를 도왔습니다. – David

답변

1

이 문제는 Peta Poco의 알려진 문제입니다. 일부 버전에서는 수정 된 것으로 보이지만 어느 버전인지는 알 수 없습니다. 이 특정 문제에 대한 자세한 정보 및 해결 방법은 https://github.com/toptensoftware/PetaPoco/issues/22

9

세미콜론 앞의 공백을 제거하십시오.

Alex Jorgenson의 링크에 따르면 세미콜론을 첫 번째 문자로 사용하면이 문제가 해결됩니다. 필자의 테스트에 따르면 이것은 엄격하게 첫 번째 문자입니다. 즉 세미콜론 앞에 공백이 있으면 자동 생성 된 코드가 계속 나옵니다.

+1

하하! 9 개월 후 같은 문제가 다시 발생하여 해결책을 찾았습니다. 잘 했어, 나! – David

+0

4 년 후 나는이 게시물로 돌아왔다. 나는 너무 좋아! –

관련 문제