将没有列的存储过程结果映射到模型

时间:2014-05-13 18:52:35

标签: c# sql sql-server entity-framework stored-procedures

我有一个存储过程,返回两列而不指定其名称,一个是ID(int),另一个是字符串。我无法更改存储过程,以便它可以使用列名返回结果

如果我让Visual Studio使用.edmx中的存储过程创建dbContext文件,它会创建一个新模型类,其中包含两个名为Column1Column2的属性。问题是,当我运行它时,我收到以下错误:

  

数据读取器与指定的'Schema.addCliente_Result'不兼容。类型为“Column1”的成员在数据读取器中没有相应的列具有相同的名称。

有没有其他方法可以将结果映射到dictionary<int,string>或其他不需要列名的其他内容?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用KeyValuePair。它会保存为密钥指定的值。如果您有更多对,并且想要更轻松地迭代它,则可以创建KeyValuePair列表。我不确定这对你的情况是否有帮助,对不起,如果没有帮助的话。

KeyValuePair MSDN

答案 1 :(得分:0)

也许您可能想要考虑投影,因为您不希望它映射到模型。投影是指将查询结果输出到与查询结果不同的类型。无论哪种方式,您都可以使用存储过程的结果来创建匿名类型或您自己的类。由于我没有可供参考的代码,我有一个例子如下:

用于存储结果的类

equals()

调用存储过程的代码

public Class Result
{
    public int myID {get; set;}
    public string myString {get; set;}
}