PETAPOCO - 无效的对象名称

Inv*_*Dog 5 common-table-expression 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;
    }
Run Code Online (Sandbox Code Playgroud)

该模型非常简单:

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; }         
    }
Run Code Online (Sandbox Code Playgroud)

我试着打破SQL以确保它正确构建,但我仍然得到错误.知道为什么会这样吗?

Dav*_*vid 13

删除分号前的空格.

根据Alex Jorgenson的链接,如果你在第一个字符中使用分号,这是固定的.根据我的测试,这是第一个字符,即如果在分号之前甚至有一些空格,则自动生成的代码仍将被吐出.

  • 哈哈!我刚刚遇到了同样的问题,9个月后发现了这个,这就是解决方案.干得好,我! (2认同)

Ale*_*son 2

这是 Peta Poco 的一个已知问题。似乎在某些版本中已修复,但我不知道是哪个版本。您可以在https://github.com/toptensoftware/PetaPoco/issues/22找到更多信息和解决此特定问题的方法