2013-05-22 2 views
2

Я использую CTE с PetaPOCO и получаю странную ошибку
SQL Exception: Invalid Object Name PayTransactionForRollingVacationAverage, которая ссылается на модель, на которую должны отображаться данные.PETAPOCO - Недопустимое имя объекта

Код выглядит следующим образом.

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; 
    } 

модель довольно проста:

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, чтобы убедиться, что правильно строить, но я все еще получаю ошибку. Любая идея, почему это происходит?

+0

SQL выглядит нормально - вы на SQL Server правильно? – Rikalous

+0

Можете ли вы принять мой ответ? Это помогло мне дважды. – David

ответ

1

Это известная проблема с Пета Поко. Кажется, он исправлен в некоторой версии, но я не знаю, какой из них. Вы можете найти дополнительную информацию и проработать эту конкретную проблему по адресу https://github.com/toptensoftware/PetaPoco/issues/22

9

Удалите пробелы перед точкой с запятой.

Согласно сообщению Alex Jorgenson, это исправлено, если вы сделаете полуточку первым символом. Согласно моему тестированию, это строго первый символ, т. Е. Если перед точкой с запятой есть даже пробелы, автоматически сгенерированный код все равно будет выплюнуть.

+1

Ха-ха! У меня снова была такая же проблема, 9 месяцев спустя, и я нашел это, и это было решением. Хорошая работа, я! – David

+0

4 года спустя, и я вернулся к этому сообщению. Я так люблю! –