2017-05-01 6 views
0

je suit la requête SQL que je veux courir en utilisant EF:Exécuter commande SQL qui retourne une table sql déclarée avec EF

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 

Quand je le lance par cette méthode:

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

Mais il émet une erreur comme ci-dessous:

Le lecteur de données est incompatible avec le 'Data.Models.AspNetUser' spécifié. Un membre du type 'Id' n'a pas de colonne correspondante dans le lecteur de données avec le même nom.

En fait, je veux jeter le résultat à un autre type (non défini dans les modèles EF), et je'en veux utiliser le modèle ASPNETUSER, donc j'ai essayé ceci:

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; 
      } 

Mais le datareadr (dr) n'a aucun enregistrement dans ce cas.

Mise à jour:

J'ai trouvé la solution. Tout d'abord, je dois mettre "Select ..." déclaration à la fin de la requête, aussi je peux utiliser le type personnalisé lors de l'appel db.Database.SqlQuery.

+0

Vous pouvez répondre à votre question. Ne modifiez pas la réponse dans la question, mais mettez-la dans la case de réponse fournie s'il vous plaît. –

Répondre

0

J'ai trouvé la solution. Tout d'abord, je dois mettre "Select ..." déclaration à la fin de la requête, aussi je peux utiliser le type personnalisé lors de l'appel db.Database.SqlQuery.