PETAPOCO - Неверное имя объекта
Я использую CTE с PetaPOCO и получаю странную ошибкуSQL Exception: Invalid Object Name PayTransactionForRollingVacationAverage
который ссылается на модель, к которой должны быть привязаны данные.
Код выглядит следующим образом.
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-код, чтобы убедиться, что он строится правильно, но все равно получаю ошибку. Есть идеи, почему это происходит?
2 ответа
Удалите пробел перед точкой с запятой.
По ссылке Алекса Йоргенсона, это исправлено, если вы ставите точку с запятой в качестве первого символа. Согласно моим тестам, это строго первый символ, то есть, если перед точкой с запятой есть пробел, автоматически сгенерированный код все равно будет выплеван.
Это известная проблема с Peta Poco. Кажется, это исправлено в какой-то версии, но я не знаю, какая именно. Вы можете найти больше информации и обойти эту проблему на https://github.com/toptensoftware/PetaPoco/issues/22