何よりもまず、使用したいテクノロジーを正確に定義する必要があると思います。あなたは、従来の ADO.NET データベース プログラミングの使用を余儀なくされていると思われる DataSet を言い続けています。この場合、オブジェクトを構築する順序は重要ではありません。
アプリケーションは、ADO.NET DataSet からハイドレートするオブジェクトを利用するか、または の新しい機能を使用してハイドレートされたLoad<Type>()
オブジェクトを返すことができます。最初に、返したいオブジェクトを構築します。これらのオブジェクトは、データベースの考慮事項から独立している必要があります。(いつ、どこでデータベース モデルを構築するかは問題ではありません。現在または後で行うことができます...永続性の問題がオブジェクト モデリングやビジネス ロジックを妨げてはなりません)
例:
public class Book
{
public string Title {get;set;}
public DateTime PublicationDate {get;set;}
public decimal Cost {get;set;}
public virtual Author {get;set;}
}
public class Author
{
public string Name {get;set;}
public DateTime DateOfBirth {get;set;}
}
次に、リポジトリを構築してオブジェクトを返し、クエリを定義します。これをもう一度入力する代わりに、読むためのリンクをいくつか示します。
リポジトリとデータ マッパーのパターン
次に、DataSet を使用して、SQL クエリからであろうとストアド プロシージャからであろうと、違いはありません。
でも
これを行うには、Entity Framework 5RC または Entity Framework 4.1+ Code First について調査することをお勧めします。ADO.NET は、これを行う最善の方法ではありません。Code First 内での作業方法については、スタック上に大量のデータがありますが、オプションである場合は、そのパスを開始するためのリンクを 1 つまたは 2 つ提供します。
EntityFramework から複雑な結果セットを照会し、MVC で結果セットを表示する方法。
言い忘れたこと
がありますが、WCF からライブ データセットを返すことはできませんし、返すべきではありません。これを行うためのハックがありますが、多くの理由でこれを行わないことを強くお勧めします. WCF は、永続性の問題から完全に独立し、ロジックのない純粋なデータを含む DTO (データ転送オブジェクト) を返す必要があります。これにより、誰かがオブジェクト DTO を持ち、.NET 環境での操作を強制されることを心配することなく、シリアライズおよびデシリアライズできます。WCF サービスは、任意の SOAP 対応言語で使用でき、その言語内のオブジェクトに逆シリアル化できる必要があります。
WCF からの応答は本質的に XML シリアル化されたオブジェクトであり、サービスのコンシューマーへの WCF 応答には存在しない、DTO に注入する追加の懸念事項を常に考慮する必要があります。