【问题标题】:Map Stored Procedure Result without Columns to a Model将不带列的存储过程结果映射到模型
【发布时间】:2014-07-01 14:30:01
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

    KeyValuePair MSDN

    【讨论】:

      【解决方案2】:

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

      用于存储结果的类

      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();
      
      }
      

      【讨论】:

        猜你喜欢
        • 2016-08-24
        • 2017-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多