Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将不带列的存储过程结果映射到模型_C#_Sql_Sql Server_Entity Framework_Stored Procedures - Fatal编程技术网

C# 将不带列的存储过程结果映射到模型

C# 将不带列的存储过程结果映射到模型,c#,sql,sql-server,entity-framework,stored-procedures,C#,Sql,Sql Server,Entity Framework,Stored Procedures,我有一个存储过程,它返回两个列而不指定它们的名称,一个是ID(int),另一个是字符串。我不可能更改存储过程,使其能够返回带有列名的结果 如果我让Visual Studio使用dbContext中的存储过程创建.edmx文件,它将创建一个新的模型类,该类具有两个名为Column1和Column2的属性。问题是,当我运行它时,我收到以下错误: 数据读取器与指定的“Schema.addCliente_Result”不兼容。“Column1”类型的成员在数据读取器中没有同名的对应列 是否有其他方法可以

我有一个存储过程,它返回两个列而不指定它们的名称,一个是ID(int),另一个是字符串。我不可能更改存储过程,使其能够返回带有列名的结果

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

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


是否有其他方法可以将结果映射到
字典
或其他不需要列名的内容?

您可以尝试使用
KeyValuePair
。它保存为密钥指定的值。如果您有更多的对,并且希望更轻松地遍历,则可以创建
KeyValuePair
列表。我不确定这对你是否有帮助,如果没有帮助,很抱歉


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

用于存储结果的类

public Class Result
{
    public int myID {get; set;}
    public string myString {get; set;}
}
调用存储过程的代码

string connectionString = ConfigurationManager.AppSettings["MyDatabase"];
var conn = new SqlConnection(connectionString);
conn.Open();
string query = @"my_stored_procedure";
using (var sqlAdpt = new SqlDataAdapter(query, conn))
{
    sqlAdpt.SelectCommand.CommandType = CommandType.StoredProcedure;
    // Ex: Parameters if your sp takes one
    var dataDate = new SqlParameter { ParameterName = "@DataDate", Value = DateTime.Now };
    sqlAdpt.SelectCommand.Parameters.Add(dataDate);
    var results = new DataSet();
    sqlAdpt.Fill(results);
    List<Result> resultList = results.Tables[0].AsEnumerable().
        Select(dataRow => new Result
        {
            myID = dataRow.Field<int>("ID"),
            myString = dataRow.Field<string>("column_I_cant_change")
        }).ToList();

}
string connectionString=ConfigurationManager.AppSettings[“MyDatabase”];
var conn=新的SqlConnection(connectionString);
conn.Open();
字符串查询=@“我的存储过程”;
使用(var sqlAdpt=newsqldataadapter(查询,连接))
{
sqlAdpt.SelectCommand.CommandType=CommandType.StoredProcess;
//Ex:如果sp采用一个参数,则为参数
var dataDate=newsqlparameter{ParameterName=“@dataDate”,Value=DateTime.Now};
sqlAdpt.SelectCommand.Parameters.Add(数据日期);
var results=新数据集();
sqlAdpt.Fill(结果);
List resultList=results.Tables[0]。AsEnumerable()。
选择(数据行=>新结果
{
myID=dataRow.Field(“ID”),
myString=dataRow.Field(“列不能更改”)
}).ToList();
}