C# 将不带列的存储过程结果映射到模型
我有一个存储过程,它返回两个列而不指定它们的名称,一个是ID(int),另一个是字符串。我不可能更改存储过程,使其能够返回带有列名的结果 如果我让Visual Studio使用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”类型的成员在数据读取器中没有同名的对应列 是否有其他方法可以
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();
}