【问题标题】:Entity Framework, stored procedure, returning multiple temp tables?实体框架,存储过程,返回多个临时表?
【发布时间】:2017-10-23 15:54:44
【问题描述】:

解决此问题的最简单、最简单的方法是什么。我有一个复杂的存储过程,它返回两个临时表。

如何让这些表格显示在实体框架 edmx 文件中?或者这样的事情是不可能的?最终结果我需要两个临时表都在自己的模型中。 SP 接受 2 个参数作为输入。

目前我正在使用这种方法。但只有一张表返回,我也没有得到列名。它们仅作为数组对象返回。我必须手动将其映射到一个不理想、乏味和 hacky 的模型。

        SqlCommand command = new SqlCommand("returnTwoTablesSP", connection);
        command.CommandType = System.Data.CommandType.StoredProcedure;
        command.Parameters.AddWithValue("@DataDateFrom", string.Empty);
        command.Parameters.AddWithValue("@DataDateTo", string.Empty);

     List<TwoTableModel> tableList = new List<string>();

    SqlDataReader reader = command.ExecuteReader();
    while (reader.Read())
    {
        object[] values = new object[reader.FieldCount];
        reader.GetValues(values); // This returns the columns but just from 
                                     the 1st temp table only.
        var model = new TwoTableModel()
        {
            UserId = values[0].ToString(), //Each column field
            Name = values[1].ToString(),

        };

        tableList.Add(model);
    }
     return tableList;

【问题讨论】:

  • 你能显示存储过程吗?
  • SP 太长了,我发布它可能会遇到麻烦,但它会返回两个表。一个包含名称、出生日期等的标题表。第二个是由 userid 连接的详细信息表,其中包含有关人员的更多详细信息。每个中的数据都是从数据库中的各种表中获取的
  • 读取下一个数据集。 reader.NextResult();
  • NextResult 确实有效,但是我不知道如何直接将结果与我的 Table1Model 映射。由于返回的结果是来自不同表的列的集合,我如何从中创建数据库模型?目前,我手动创建了一个表 1 和一个表 2 模型,它们代表将从 SP 返回的列。共有 75 列。如果我逐行手动设置模型中的每一列,它看起来很俗气。有什么方法可以将 sp 中的列映射到 Table1.cs 和 Table2.cs 的属性中

标签: c# entity-framework stored-procedures


【解决方案1】:

使用 NextResult() 获取存储过程返回的下一个表。

reader.NextResult();

有关如何为您的 edmx 或代码首先配置它的更多信息和一个非常好的示例可以在这里找到:https://msdn.microsoft.com/en-us/library/jj691402(v=vs.113).aspx

【讨论】:

  • NextResult 确实有效,但是我不知道如何直接将结果与我的 Table1Model 映射。由于返回的结果是来自不同表的列的集合,我如何从中创建数据库模型?目前,我手动创建了一个表 1 和一个表 2 模型,它们代表将从 SP 返回的列。共有 75 列。如果我逐行手动设置模型中的每一列,它看起来很俗气。有什么方法可以将 sp 中的列映射到 Table1.cs 和 Table2.cs 的属性中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-07
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-08
  • 2017-11-15
相关资源
最近更新 更多