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

Другие вопросы по тегам