【问题标题】:Execute sql command which return a declared sql table using EF使用 EF 执行返回声明的 sql 表的 sql 命令
【发布时间】: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


【解决方案1】:

我找到了解决方案。首先,我必须在查询的末尾加上“Select ...”语句,调用db.Database.SqlQuery时也可以使用自定义类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2017-11-02
    • 1970-01-01
    • 2019-07-26
    • 2015-01-29
    • 2013-08-24
    相关资源
    最近更新 更多