2017-10-23 36 views
0

この問題を解決する最も簡単で簡単な方法は何ですか?私は2つの一時テーブルを返す複雑なストアドプロシージャを持っています。Entity Framework、ストアドプロシージャ、複数の一時テーブルを返すか?

これらのテーブルをエンティティフレームワークのedmxファイルに表示するにはどうすればよいですか?それとも不可能なのでしょうか?最終結果両方のテンポラリテーブルをそれぞれのモデルに入れる必要があります。 SPは2つの引数を入力として受け入れます。

現在このメソッドを使用しています。しかし、1つのテーブルだけが返され、カラム名も取得されません。それらは配列オブジェクトとして戻ってくるだけです。理想的で退屈でハッキーではないモデルに手動でマップする必要があります。

 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; 
+0

は、ストアドプロシージャを表示することができますか? –

+0

SPは非常に長くなりすぎていますが、2つのテーブルを返すが、投稿する際に問題が発生する可能性があります。 1つは、名前、dobなどのヘッダーテーブルです。 2番目は、ユーザーに関する詳細情報を持つユーザーIDによって結合された詳細テーブルです。データベース内のさまざまなテーブルからそれぞれのデータを取得します。 – CodeMan03

+0

次のデータセットを読み込みます。 'reader.NextResult();' –

答えて

1

NextResult()を使用して、ストアドプロシージャから返された次のテーブルに移動します。

reader.NextResult(); 

詳細情報およびごEDMXまたは最初のコードのためにそれを設定する方法については非常に良い例がここで見つけることができます:https://msdn.microsoft.com/en-us/library/jj691402(v=vs.113).aspx

+0

NextResultは動作しますが、私は直接結果を私のTable1Modelとどのようにマップするのかわかりません。返された結果は異なるテーブルの列のコレクションなので、これからデータベースモデルを作成するにはどうすればよいですか?現在、私は手動で表1とSPから返される列を表す表2モデルを作成しました。合計75列です。私が行ごとに行って、私のモデルの各列を手動で設定すると、それは不粘着に見えます。 spの列を私のTable1.csとTable2.csのプロパティにマップする方法はありますか – CodeMan03

関連する問題