多选结果和Linq to Entities

时间:2012-09-27 09:07:18

标签: c# sql-server stored-procedures ado.net entity-framework-5

我有一个返回未知数据量的SP,这是我的查询示例:

MySP:

WHILE (@counter <= @SomeParameter)
BEGIN
   Select *
   From tblFoo
   Where tblFoo.Counter=@counter

   @counter=@counter+1
END

为了有效地存储数据,我想使用DataSet,它将在每个DataTable中存储每个选择的结果。

由于我的应用程序基于EF 5,我尝试用我的dbContext对象调用我的SP,这是我尝试做的。

var ds=db.Database.SqlQuery<DataSet>("MySP @counter @SomeParameter", value1,value2);

这似乎无法正常工作。

我想过使用经典的ADO.NET来解决这个问题,并使用SqlDataAdapter,但我不知道如何将原始的连接引用从dbContext传递给SqlDataAdapter } .Connection属性,因为它的类型不同。

注意:我在这个问题上使用DataSet而不是Entities Collection的原因是因为我从SP获得的结果可能有不同的列,因此我不确定Entities Collection是否会这样做。

我想知道如何使用Entities(或SqlAdapter)调用我的SP来填充我的DataSet中的每个表,以及每个从我的SP中选择的结果。

我在EF很新鲜,所以如果我在思考或做任何错事,任何提示都会受到影响。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用此代码 - 基于SqlDataAdapter

var connectionString = "...";
using (SqlConnection connection = 
        new SqlConnection(connectionString))
    {
        SqlDataAdapter adapter = new SqlDataAdapter();

         var cmd = new SqlCommand("YourSP", connection);//Adjust your stored procedure name
         cmd.CommandType = CommandType.StoredProcedure;
         cmd.Parameters.Add(new SqlParameter("@SomeParameter", YourValue));//Adjust your value

         adapter.SelectCommand = cmd;
         adapter.Fill(dataset);
        return dataset;
    }