2

ResultColumn属性が設定された POCO クラスがあり、Single<Entity>()呼び出しを行うと、結果列がマップされません。その値は常にSQL 列のデフォルトの制約によって生成される必要があるため、列を結果列に設定しました。この列がビジネス レイヤーから挿入または更新されることは望ましくありません。私が言おうとしているのは、私の列の型は単純な SQL データ型であり、関連するエンティティ型ではないということです (ResultColumn主にそれらで使用されているように)。

コードを見ると、PetaPoco に次の行が表示されます。

// Build column list for automatic select
QueryColumns = (   from c in Columns
                   where !c.Value.ResultColumn
                   select c.Key
               ).ToArray();

結果列が自動選択ステートメントから除外されるのはなぜですか。私が理解しているように、その性質は読み取り専用であるためです。そのため、 selects のみで使用されます。このシナリオは、列が実際に関連エンティティ タイプ (複合型) である場合に見られます。Ok。しかし、そのような別の属性が必要であり、そのような属性ComputedColumnAttributeは常に選択で返されますが、挿入や更新では使用されません...

では、PetaPoco チームが select から結果列を省略することにしたのはなぜですか?
それでは、結果列をどのように読むべきですか?

4

1 に答える 1

2

作成者がそれらを自動選択に追加しなかった理由は答えられませんが、特定のユースケースが彼らが検討していた主なユースケースではないためだと思います。彼らのサイトでその機能の例と説明を見ると、結合または計算で戻す追加の列を対象としています (コード値のルックアップ テーブルからの説明など)。これらの状況では、それらは基になるテーブルの一部ではないため、選択に自動的に追加することはできませんでした。

したがって、その属性を使用してプロパティの値を取得する場合は、自動選択に頼るのではなく、独自の手動選択ステートメントを使用する必要があります。

もちろん、PetaPoco を使用することの利点は、上記で提案したように新しい属性を作成するか、選択からそれらのフィールドを除外しないように示したコードを変更することにより、ニーズに合わせて簡単に変更できることです (他の結合タイプの状況では ResultColumn を使用しないでください)。

于 2012-03-30T09:00:33.927 に答える