Entity Framework 6 Хранимая процедура на стороне C # отсутствует созданный столбец - PullRequest
0 голосов
/ 04 июня 2018

У меня есть следующая хранимая процедура.Я реализовал UNION, чтобы избежать написания 2 хранимых процедур.Моя главная проблема заключается в том, что EF не распознает динамически созданный столбец, даже если я добавлю его вручную в класс object_result, который запрашивает модель.Кто-нибудь знает, как заставить работать такие динамически генерируемые столбцы?

(странно, что RANK() VolumeRank ниже работает, но RefYear не отображается).

SQL:

BEGIN
    SET NOCOUNT ON;
    SET FMTONLY OFF; 

    SELECT * 
    FROM 
        (SELECT 
             B.OS, B.DS, COUNT(DISTINCT A.PO) Volume, 
             RANK() OVER (ORDER BY COUNT(DISTINCT A.PO) DESC) VolumeRank, 
             YEAR(GETDATE()) RefYear 
         FROM 
             DB.DW.LoadData AS A 
         JOIN 
             DB.DW.Geo AS B ON A.PO = B.PO 
         INNER JOIN 
             DW.DMaster AS C ON A.LoadDateKey = C.DateKey 
         WHERE  
             C.IsT12Weeks_LastWeek = 1 
             AND a.PrimaryCustomerID = @CustomerId
         GROUP BY 
             B.OS, B.DS) AS A 
    WHERE 
        VolumeRank <= 3 

    UNION

    SELECT * 
    FROM 
        (SELECT 
             B.OS, B.DS, 
             COUNT(DISTINCT A.PO) Volume, 
             RANK() OVER (ORDER BY COUNT(DISTINCT A.PO) DESC) VolumeRank,
             YEAR(getdate())-1 RefYear 
         FROM 
             DB.DW.LoadData AS A 
         JOIN 
             DB.DW.Geo AS B ON A.PO = B.PO 
         INNER JOIN 
             DW.DMaster AS C ON A.LoadDateKey = C.DateKey 
         WHERE 
             PrimaryCustomerID = @CustomerId 
             AND FWeek >= @FirstWeek 
             AND FWeek <= @LastWeek 
             AND FiscalYear = @FiscalYear
         GROUP BY 
             B.OS, B.DS) AS A 
     WHERE 
         VolumeRank <= 3 
     ORDER BY 
         RefYear DESC, Volume DESC
END

C #:

List<spGetT_Result> result = new List<spGetT_Result>();

using (var db = new T_Entities())
{
    result = db.spGetT(eid, firstWeek, lastWeek, year).ToList();
}

Класс модели содержит эту строку, но при запуске всегда имеет значение:

public Nullable<int> RefYear { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...