2

SQLセットアップに2つのビューがあります。

  • 注文書
  • PurchaseOrderLineItems

これらにはエイリアスされた多くの列があります(表示/結合するテーブルには意味のある名前が付けられていません...これはサードパーティ製品です)

私は2つのクラスを持っています(以下に簡略化されています)

    class PurchaseOrder
    {
        public string PoNumber { get; set; }
        public string Vendor { get; set; }
        public DateTime DateCreated { get; set; }

        public IEnumerable<PurchaseOrderLineItems> LineItems { get; set; }
    }

    class PurchaseOrderLineItems
    {
       public string PoNumber { get; set; }
       public string Name { get; set; }
       public double Price { get; set; }
    }

Linq to Sqlを使用しています-XMLマッピングファイル(sqlmetal.exeの助けを借りて作成)

私がやりたいのは、PurchaseOrderLineItemビューからのレコードをPurchaseOrderのIEnumerableに効果的に入力することです-テーブルを効果的に結合します

POCOを使用してこれを実行したかったのですが、クラスにEntitySet <>を追加する必要はありませんでした。最終的には、ORMをnHibernate(バッグ属性があると思います...?)のようなものに変更します。

現在、ストアドプロシージャ(PONumberを取得してPurchaseOrderLineItemオブジェクトのリストを返すsp_getPurchaseOrderLineItems)があり、それを結果セットに追加します(これは理想からはほど遠いです)。

必要なことをする方法はありますか?つまり、基本的に、PurchaseOrderのクエリは、インスタンス内にすでに入力されているLineItemsのIEnumerableを返しますか?

これは読み取り専用であり、これを使用してデータを挿入/更新することは決してありません。

4

2 に答える 2

2

PurchaseOrder クラスを拡張して OnLoadedMethod を実装できます。

public partial class PurchaseOrder 
{
    partial void OnLoaded()
    {
        LineItems = FunctionToCall_sp_getPurchaseOrderLineItems_AndBuildSet();
    }
}

これにより、PO を取得したときに、少なくとも品目が自動的に取得されます。

于 2009-10-13T16:26:44.337 に答える
0

これがn+1問題です。nHibernate にはこれに対する解決策があり、これは join-fetch クエリと呼ばれます。これが基本的に行うことは、order と order-line の間の外部結合クエリであり、2 つのテーブルの行数の積になります。

Linq2SQL には解決策がないと思います。ただし、ストアド プロシージャを使用して join-fetch 出力を生成し、Linq2Objects コードをいくつか使用して、結果から一意の注文と注文行を区別することができます。

于 2009-10-13T16:42:07.060 に答える