如何从动态Entity Framework存储过程返回表格字符串数据?

时间:2017-02-06 15:45:51

标签: c# sql-server entity-framework

我使用手动ADO连接而不是EF将原型应用程序整合在一起,我现在正在“升级”。我的一个存储过程如下所示:

DECLARE @tableName NVARCHAR(999);

SELECT @tableName = DatabaseTable
FROM JobQueue
WHERE JobId = @JobId;

DECLARE @sql NVARCHAR(999);

SET @sql = 'SELECT * FROM ' + @tableName;

EXEC (@sql);

现在,EF在这个例子中对表格一无所知。它可能包含任何数据类型的任意数量的列。它无法映射到实体,因为它是动态的,并且在完成此作业后将不再存在。所以查询必须是动态的,这也意味着我不能在EF中生成返回类型。

我的原始ADO代码只是抓取数据并将其读入List<string[]>,如下所示:

List<string[]> result = new List<string[]>();
while (dr.Read())
{
    string[] values = new string[dr.FieldCount];
    for (int i = 0; i < dr.FieldCount; i++)
    {
        values[i] = dr[i].ToString();
    }
    result.Add(values);
}

那很好。但我无法弄清楚如何让EF做类似的事情。我最接近的是:

var query = Entities.Database
            .SqlQuery<List<string>>("exec spGetJobData @JobId", new SqlParameter("JobId", jobId))
            .ToList();

返回列表中预期的项目数,但所有项都为空。

如何获取数据?

1 个答案:

答案 0 :(得分:1)

EF希望为所有数据库返回提供强定义类型,并且只允许1对1映射。所以简短的回答是EF不会支持你想要的东西。您似乎可以选择重新编写代码以使用EF或保持原样。