0

私は Web ベースのペニー オークション ポータルに取り組んでいます。Asp.net MVC 3 アーキテクチャのデータ アクセス クラス ライブラリとして PetaPoco を使用しています。ストアド プロシージャを使用したマルチテーブル データ プルの問題に直面しています。フロントエンドで必要なストアド プロシージャ フィールドをマッピングするためのビュー モデル POCO を作成しました。

モデルを見る:

public class BiddersViewModel
{
    public Guid UserId { get; set; }
    public String UserName { get; set; }
    public DateTime LastActivityDate { get; set; }
    public int NumberOfBids { get; set; }
    public int AuctionId { get; set; }
    public int BidId { get; set; }
    public decimal BidAmount { get; set; }       
}

コントローラ

public ActionResult Index()
{
    var context = new PetaPoco.Database("DataContext");
    return View(context.Query<dynamic>("exec udsp_Bidders_SelectAll"));
} 

必要なもの

複数の結合を使用してデータベースからデータを取得し、ストアド プロシージャを使用して (ビュー モデル クラスを使用して) ビューに表示する必要があります。

4

1 に答える 1

2

ストアド プロシージャが POCO クラスで使用するのと同じ列名を返す場合は、コードを次のように変更できます。

public ActionResult Index()
{
    var context = new PetaPoco.Database("DataContext");
    return View(context.Fetch<BiddersViewModel>("exec udsp_Bidders_SelectAll"));
}

として定義されたモデルタイプを持つ強力なタイプのビューがある可能性が高いため、ビューは期待どおりに機能するはずですIenumerable<BiddersViewModel>

ストアド プロシージャが、POCO ビュー モデル クラス内で定義した他の列を返す場合でも、心配する必要はありません。マップしないものに正しい名前が付いていることを確認してください (またはColumnAttributeそれらをプロパティにマップするために使用します)。

Fetch/Query違いについては、使用Fetchするとコントローラーアクションでレコードを読み取ることになりますが、それを使用Queryしてビューに渡すと、ビューでレコードを読み取ることになります。通常は、コントローラー アクションでデータを準備し、そのデータをビューで使用することをお勧めします。このパターンをサポートするには、コントローラー アクションでFetchまたはを使用する必要があります。Query<T>().ToList()

ただし、ビューで何らかの理由でこれらの結果を操作する必要がある場合 (他の方法で実行できない場合) は、Query実際の列挙子を使用してビューに渡します。これにより、結果が操作され、それに応じて読み取られます。

于 2012-04-03T10:24:32.730 に答える