Получить данные из хранимой процедуры в Entity Framework без Entity при возврате функции - PullRequest
0 голосов
/ 18 марта 2019

Это моя хранимая процедура, немного сложная

ALTER PROCEDURE [dbo].[spx_SELECT_Etiquetas]
@Localizacao nvarchar(20),
@LocalizacaoID int = NULL,
@Armazem int

AS
BEGIN


SET NOCOUNT ON 

    DECLARE @SQL NVARCHAR(MAX); 
    IF(@Armazem = 1)
    BEGIN
        SET @SQL = 'SELECT Etiqueta, xl.LocalizacaoID
                FROM OPENQUERY(MACPAC, ''SELECT ET0101 AS Etiqueta,
                                                ET0109 AS Localizacao

                                         FROM (         
                                                SELECT DISTINCT FET001.ET0109,  FET001.ET0101
                                                FROM AUTO.D805DATPOR.FET001 FET001
                                                WHERE (FET001.ET0104=''''POE'''') AND (FET001.ET0105=''''DIS'''') AND FET001.ET0109 = (''''' + @Localizacao + ''''')                                
                                         ) AS AUTO '') AS mc
                 LEFT JOIN xLocalizacao xl
                 ON xl.Localizacao = mc.Localizacao
                 WHERE LocalizacaoID = ' + CONVERT(NVARCHAR(MAX),@LocalizacaoID) + '
                 UNION
                 SELECT Etiqueta, xe.LocalizacaoID FROM xEtiquetas xe
                 WHERE xe.LocalizacaoID = ' + CONVERT(NVARCHAR(MAX),@LocalizacaoID) + '
                 ORDER BY Etiqueta DESC';
    END
    ELSE IF(@Armazem = 2)
    BEGIN
    SET @SQL = 'SELECT Etiqueta, xl.LocalizacaoID
                FROM OPENQUERY(MACPAC, ''SELECT LBLBNB AS Etiqueta,
                                                GHNEMP AS Localizacao

                                         FROM (         
                                                SELECT DISTINCT GA160H.GHNEMP, GA160H.LBLBNB
                                                FROM D805DATPOR.GA160H GA160H, D805DATPOR.GA160M GA160M
                                                WHERE GA160M.LBLBNB = GA160H.LBLBNB AND (GA160H.GHZORI=''''CORRICA'''') AND (GA160H.GHCSTA=''''DIS'''') AND GA160H.GHNEMP = (''''' + @Localizacao + ''''')                              
                                         ) AS AUTO '') AS mc
                 LEFT JOIN xLocalizacao xl
                 ON xl.Localizacao = mc.Localizacao
                 WHERE LocalizacaoID = ' + CONVERT(NVARCHAR(MAX),@LocalizacaoID) + '
                 UNION
                 SELECT Etiqueta, xe.LocalizacaoID FROM xEtiquetas xe
                 WHERE xe.LocalizacaoID = ' + CONVERT(NVARCHAR(MAX),@LocalizacaoID) + '
                 ORDER BY Etiqueta DESC';
    END                             
    EXEC sp_executesql @SQL

END

Он получает этикеты из локальной таблицы, а также из таблицы на связанном сервере. Выходные данные - столбцы Etiquetas и Localizacao

Однако у меня есть таблица для сохранения локально новых Этикет, которые добавлены, поэтому у меня есть следующий класс, сгенерированный EF

public partial class xEtiquetas
{
    public int EtiquetaID { get; set; }
    public int Etiqueta { get; set; }
    public int LocalizacaoID { get; set; }

    public virtual xLocalizacao xLocalizacao { get; set; }
}

это мой контроллер get. В основном отношение

Inventarios > Localizacoes > Etiquetas

x является просто идентификатором префикса, поскольку различные приложения используют одну и ту же базу данных другими коллегами, разделенными префиксом.

Кроме того, я должен получить этикеты отдельно, используя хранимую процедуру, поскольку она поступает со связанного сервера. (Если нет другого пути)

public IQueryable<InventarioModel> Get()
    {
        InventarioCiclicoContext db = new InventarioCiclicoContext();

        var inventarios = db.xInventario.Select(
            i => new InventarioModel { 
                                    InventarioID = i.InventarioID, 
                                    Colaborador = i.xColaborador.Nome,
                                    Armazem = i.xArmazem.Armazem,
                                    Estado = i.EstadoInventario,
                                    Data = i.DataCriacao,
                                    Localizacoes = i.xLocalizacao.Select(
                                    l => new LocalizacaoModel {
                                                                 LocalizacaoID = l.LocalizacaoID,
                                                                 Localizacao = l.Localizacao,
                                                                 EtiquetasPorInventariar = l.EtiquetasPorInventariar,
                                                                 EtiquetasInventariadas = l.EtiquetasInventariadas,
                                                                 Valid = l.IsValid,
                                                                 Precisao = l.Precisao,
                                                                 InventarioID = l.InventarioID
                                                             }).ToList()
                                });

        string localizacao = ".MP3-D16";
        int? localizacaoID = 1;
        int? armazem = 1;

        var etiquetas = db.spx_SELECT_Etiquetas(localizacao, localizacaoID, armazem);

        return inventarios.ToList().AsQueryable();
    }

SP возвращает -1. Я попытался использовать возвращаемый тип Entity, но он не работает, потому что сгенерированная локальная таблица предназначена только для созданного, поэтому столбцы, возвращаемые связанным сервером, не позволят мне использовать это.

Я создал класс EtiquetaModel

public class EtiquetaModel
{
    public int Etiqueta { get; set; }
    public string Localizacao { get; set; } 
}

Есть ли способ получить выходные данные от SP к этому классу? Я даже не могу использовать ToList () на нем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...