Ich habe die folgende gespeicherte Prozedur, die eine dynamische Abfrage aufruft, die mehrere Zeilen zurückgibt.Ergebnis der gespeicherten Prozedur in eine Liste des komplexen Typs zurückgeben
CREATE PROCEDURE [dbo].[usp_list_connections] @skip int, @take int = 50
WITH EXECUTE AS OWNER
AS
BEGIN
IF 1 = 2 -- For EF to recognize columns
BEGIN
SELECT CAST(1 AS int) [Id], CAST('A' AS nvarchar(100)) [Name], CAST(1 AS bit) [Sim], CAST(1 AS bit) [Device]
END
DECLARE @q NVARCHAR(MAX) ='';
SET @q = N'
SELECT DISTINCT e.[Id], e.[Name],
CASE
WHEN s.[Sim] IS NULL THEN 0
ELSE 1 END AS [Sim],
CASE
WHEN d.[Device] IS NULL THEN 0
ELSE 1 END AS [Device]
FROM [dbo].[Employee] e
LEFT JOIN [dbo].[Sim] s ON s.[Employee] = e.[Id]
LEFT JOIN [dbo].[Device] d ON d.[Employee] = e.[Id]
ORDER BY e.[Name]
OFFSET @skip ROWS
FETCH NEXT @take ROWS ONLY;'
SET @q = REPLACE(@q, '@skip', @skip);
SET @q = REPLACE(@q, '@take', @take);
EXEC sp_executesql @q;
END
Ich importierte die Prozedur in EF und mappte es auf einen komplexen Typ. Wenn ich versuche, das Verfahren durch EF mit dem folgenden Code
var result = db.usp_list_connections(0,50);
Es gibt eine Fehlermeldung ausgeführt werden, die die folgende ist:
„Das Ergebnis einer Abfrage kann nicht mehr als einmal aufgezählt werden.“
Was mache ich falsch? Wie kann ich die Ergebnismenge dieser gespeicherten Prozedur in einer Variablen speichern? Vielen Dank im Voraus.
Wenn ich das versuche ich die folgende Fehlermeldung erhalten: Eine Ausnahme des Typs ‚System.InvalidOperationException‘ in EntityFramework.dll aufgetreten wurde jedoch nicht im Benutzercode behandelt Weitere Informationen: Die Eigenschaft 'Sim' in 'usp_list_connections_Result' konnte nicht auf einen 'System.Int32'-Wert gesetzt werden. Sie müssen diese Eigenschaft auf einen Nicht-Null-Wert vom Typ 'System.Boolean' festlegen. – tatgergo
@tatgergo Stellen Sie sicher, dass Ihr 'DatabaseContext' sich mit der richtigen Datenbank verbindet. Und Ihr Schema und die Entität stimmen überein. –
Ich habe überprüft und sie stimmen überein. Und ich habe mich mit der richtigen DB verbunden. – tatgergo