Это моя хранимая процедура, немного сложная
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 () на нем.