【发布时间】:2017-05-01 07:31:45
【问题描述】:
我有以下想要使用 EF 运行的 SQL 查询:
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
当我通过这个方法运行它时:
dbcontext.DbSet().SqlQuery(query, "")
但它会引发如下错误:
数据读取器与指定的“Data.Models.AspNetUser”不兼容。类型的成员“Id”在数据读取器中没有同名的对应列。
实际上,我想将结果转换为另一种类型(未在 EF 模型中定义),并且我不想使用 ASPNETUSER 模型,所以我尝试了这个:
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;
}
但是datareadr(dr)在这种情况下没有记录。
更新:
我找到了解决方案。首先,我必须在查询的末尾加上“Select ...”语句,调用db.Database.SqlQuery时也可以使用自定义类型。
【问题讨论】:
-
您可以回答自己的问题。不要将答案编辑到问题中,而是将其放在提供的答案框中。
标签: sql entity-framework datareader strongly-typed-dataset