次のようなシナリオを考えてください。asp.net procから複数の結果セット:結果をクラスにマップする必要がありますか?もしそうなら、どうですか?
報告目的で実行される クエリのマルチプル結果セットを返すストアドプロシージャがあります。
また、procはテーブル値パラメータ(SQL 2008)も使用します。 http://www.sommarskog.se/arrays-in-sql-2008.html#LINQ_EF
これらの結果セットは読み取り専用です。つまり、 の更新、削除、または挿入を心配する必要はありません。
これらの結果セットは、データベース内のどのテーブルにもマップされません。 これはレポート結果であり、データベーステーブルのミラーではありません。
さて、私のバックグラウンドは、ASPの古典である、と私はすべての.NETデータアクセス戦略に を読み取ろうとしてきたが、そうです:(2)MSが持っている は、(1)MSは、Entity Frameworkの を推進しています(4)プロジェクトの状況によって適切なデータアクセス戦略が指示される ORMがこのデータアクセスシナリオに対して最適化されていないように思われる (5)複数の結果セットを格納するプロキシをマッピングするためのすぐに使えるソリューションはありません
また、私は完全なhtml出力を制御するので、コードを使用している場合は、 のみリピータとリテラルがデータバインディングに使用されます。
私は、Webフォームプログラミングモデルがコードとコンテンツの完全な分離 を提供するのに失敗し、asp classicと同じように "スパゲッティ"になり得ることを発見しました。
データアクセスとインラインスクリプト<%>を同じページに置くことでこれを実装するのはかなり簡単だと思うのですが、これは非常に簡単です。ここ は、結果となるコードのようなものの例です:その後、
<%
' data access (skipping a bunch of code)....
Dim myDataSet As New DataSet()
myCommand.Fill(myDataSet)
'...etc.
Teachers = myDataSet.Tables(0).Rows
Students = myDataSet.Tables(1).Rows
'... etc.%>
<% If Teachers.Count > 0 Then%>
<table><% For Each _Teachers In Teachers%>
<tr>
<td><%= _Teachers(0)%></td>
<td><%= _Teachers(1)%></td>
</tr><% Next %>
</table>
<% Else%>Hey, there's no records.<% End If %>
(私は下の背後にあるコードでのデータアクセスを分離しようとすると、「サブをPage_Load保護されました...」 、私は.aspxページで使用しているの背後にあるコードで 変数がエラーを与えておいてください。 「[変数]宣言されていないことは、その保護レベルにアクセスできないことがあります。。」)
結果セットの場合プロからcは強く型付けされていない、 それは世界の終わり、ひどいプログラミング実践、保守性の悪夢、 最悪の可能な選択などですか?
ストアドプロシージャの結果セットを強く型付けする必要がある場合は、 この場合、最も効果的な方法は何ですか? (私は がこのトピックに関する簡単なチュートリアルを見つけるわけではありません)
ご協力いただきありがとうございます。
感謝。 RE: "... DataTableをYourClassのコレクションに変換するメソッドを作成することを検討する"私は自分でこの部分をするにはあまりにも多くのOOPの初心者のようだと思う。それ以上の提案やリソースポインタを提供できると思いますか? – mg1075
@ mg1075 - ソリューションを説明するために作成したコードを確認してください。 http://pastebin.ca/2017916 –
私はVBではなくC#で作業していますが、明らかにVBの "yield"のサポートは不足していますか? http://stackoverflow.com/questions/97381/yield-in-vb-net – mg1075