2017-05-01 1 views
0

Ich habe folgende SQL-Abfrage, die ich mag mit EF auszuführen:SQL-Befehl ausführen, die eine deklarierte SQL-Tabelle mit EF Rück

DECLARE @Users TABLE(Id INT, Name NVARCHAR(1000),Family NVARCHAR(1000)); 
INSERT INTO @Users 
SELECT dbo.AspNetUsers.Id,dbo.AspNetUsers.FirstName,dbo.AspNetUsers.LASTNAME, 
FROM dbo.AspNetUsers 
Where dbo.AspNetUsers.ID IN 
(SELECT users.ID FROM res.UserTag JOIN dbo.AspNetUsers users ON users.ID = UserTag.UserID WHERE TagID IN (8)) 
select * from @Users result 

Wenn ich es durch diese Methode auszuführen:

dbcontext.DbSet().SqlQuery(query, "") 

Aber Es wird ein Fehler wie folgt ausgegeben:

Der Datenleser ist nicht kompatibel mit dem angegebenen 'Data.Models.AspNetUser'. Ein Mitglied des Typs 'Id' hat keine entsprechende Spalte im Datenleser mit demselben Namen.

Eigentlich mag ich das Ergebnis in einen anderen Typ umgewandelt (nicht in EF-Modellen definiert) und I don `t ASPNETUSER Modell verwenden möchte, so habe ich versucht, dies:

if (_unitOfWork.Context().Database.Connection.State!=ConnectionState.Open) 
       _unitOfWork.Context().Database.Connection.Open(); 

      DbCommand cmd = _unitOfWork.Context().Database.Connection.CreateCommand(); 

      cmd.CommandText = procedureName; 
      cmd.CommandType = CommandType.Text; 

      using (var dr = cmd.ExecuteReader()) 
      { 
       return dr; 
      } 

Aber Der Datenreader (dr) hat in diesem Fall keine Datensätze.

Aktualisiert:

ich die Lösung gefunden. Zuerst muss ich am Ende der Abfrage die Anweisung "Select ..." setzen, außerdem kann ich beim Aufruf von db.Database.SqlQuery den benutzerdefinierten Typ verwenden.

+0

Sie können Ihre eigene Frage beantworten. Bearbeiten Sie die Antwort nicht in der Frage, sondern geben Sie sie bitte in das Antwortfeld ein. –

Antwort

0

Ich fand die Lösung. Zuerst muss ich am Ende der Abfrage die Anweisung "Select ..." setzen, außerdem kann ich beim Aufruf von db.Database.SqlQuery den benutzerdefinierten Typ verwenden.