2

petapoco は次のことを達成できますか?

私は PetaPOCO を見てきましたが、4 つ以上の結合を行うことができないようです。最長の署名は次のようになります: db.Query<T1, T2, T3 , T4>

また、1 対多の関係をサポートしているようですが、以下のような 1 つの複合オブジェクトに対してのみです: db.FetchOneToMany<T1, T2> T2 は T1 の外部キーです

私はマイクロ ORM のいくつかをテストして、最高のものに固執しています。これらの状況を処理できるものを知っていますか? また、この機能をサポートしているマイクロ ORM がない場合、次のようなオブジェクトをどのように処理しますか?

class A
{
    List<B> member1;
    List<C> member2; 
    Z  member3; //Composit object
    Z1 member4; //Composit object
    Z2 member5; //Composit object
    Z3 member6; //Composit object
    Z4 member7; //Composit object
}

さらに複雑なのは、メンバー 1 (タイプ B) がそれ自体の中に何らかの複合オブジェクトを持っている場合はどうなるでしょうか? 私たちが持っているとどうなりますか:

class B
{
    G member0;
}

データベースに複数回ヒットする解決策を提案しないでください。オブジェクトが少し複雑になると、呼び出しが多すぎるためです。

無制限の結合のケースに取り組むもう 1 つの方法は、結合されたすべてのフィールドを保持する非常にフラットなオブジェクトを作成することです。それはまったくエレガントなソリューションではありません。

4

3 に答える 3

4

T1..T$ Query() オーバーロードはすべて、メインの Query(..Type[]..) メソッドに渡されます。より多くの Query() オーバーロードを自分で追加して、より多くの T パラメータを処理するか、必要なすべての型を Type 配列に渡すことができます (これは T1-T4 関数が行うことです)。

Query<TRet>( new Type[]{typeof(Poco1), typeof(Poco2), typeof(Poco3), typeof(Poco4), typeof(Poco5)}, null, sql, args);

複数の 1 対多の関係を持つことができますが、Schotime は正しいです。結果セットに返される重複データの帯に十分注意する必要があります。SQL クエリを作成し、結果セットを見てください。重複の量は許容できますか? その場合、Petapoco にはリレーター コールバックの概念があり、単一の結果行でさまざまな poco を処理する小さなクラスを記述し、各 poco を親 poco のリスト プロパティに追加します。

http://www.toptensoftware.com/Articles/115/PetaPoco-Mapping-One-to-Many-and-Many-to-One-Relationships

複数の1対多でこれを行う必要はありませんでしたが、上記から引用しました

「2 つ以上のテーブルを結合する場合は、もっと複雑なものが必要になりますが、実際には上記の拡張にすぎません。」

別のオプションは、単一のデータベース要求ですべての作業を行うストアド プロシージャを使用し、Schotime が petapoco のブランチで達成したと思われる複数の結果セットを返すようにすることですが、私はまだそれを自分で使用していないので、できませんここで役立つかどうかについて本当にコメントしてください:

http://schotime.net/blog/index.php/2011/11/20/petapoco-multiple-result-sets/

あなたが提案しているように複雑でネストされたオブジェクトのすべてのデータを一度に接続する必要がある場合は、ストアドプロシージャ(単一のdb呼び出し)を使用して、コードですべてをつなぎ合わせます。そうして初めて、Petapoco でこれを行う方法がわかりました。ただし、ユーザーがエキスパンダー ボタン (または同様のもの) をクリックするまで、ネストされたすべてのデータが UI に表示されない場合は、最初にすべてのデータを取得するのではなく、その時点で AJAX 呼び出しを使用します。

于 2012-06-30T15:30:54.277 に答える