0

シナリオ

私は最新のプロジェクトに SubSonic を使用しています。まず最初に。このプロジェクトは .net 3.0 の使用に制限されており、SubSonic は素晴らしいものでした。大好きです。

ただし、カスタマイズには問題があります。顧客は、2 つの SQL Server 2005 データベースを使用するように要求してきました。そのうちの 1 つは他のデータベースをレプリケートし、一部の列は除外します。

一見、これは簡単なことのように思えます。ただし、SubSonic はデフォルトですべての列を取得するため、SQLException が発生します。テーブルごとに選択リストをエレガントに制限したいと思います。

たとえば、次のコードでうまくいきますが、クエリを新しく作成するたびにそうする必要はありません。

Query q = Post.Query().WHERE(Post.Columns.PageId, page_id);
if(UsingReplicatedDB)
    q.SetSelectList(ReplicatedPostColumnList);
return q.ExecuteReader();

質問

上記のメソッドはコードをFetchByX肥大化させ、SubSonic によって生成された組み込みメソッドでは機能しません。テーブルごとにデフォルトの SelectListをエレガントに設定する方法はありますか?

ノート

部分クラスで実行時にスキーマから列を削除しようとしましたが、列がコレクションColNameColumn内の特定のインデックスを探しているように見えるColumnsため、計画は失敗しました。

分かってる

「あなたはばかだ、なぜあなたはこれをするのですか?」答えます。より良い方法がある可能性が高いことは理解しており、これは少しハッキーに思えますが、これが私が目指しているポイントです。嫌がらせではない解決策が必要です。

4

3 に答える 3

2

これを機能させる簡単な方法はないと思います。各 DB を指す 2 つの SubSonic プロバイダーを作成し、状況に応じて SubSonic オブジェクトを使用して別のモデルを設定することができます。しかし、SubSonic は db スキーマに非常に密接に結びついているため、思い通りに動作しません。

于 2009-03-23T03:03:13.943 に答える
0

ここではかなり厄介な状況があります。使用しているデータベースのバージョンに基づいて列をフェッチするクエリを取得する方法を見つけたとしても、ビジネスモデルまたはUIのあらゆる場所で使用しているデータベースを把握して、列を参照しないようにする必要があります。存在しない。

2つのSubSonicプロバイダーを使用してから、Generatedクラスに、2つのクラスに共通の列のプロパティと、Save(などのデータベースとの対話に使用する予定のSubsonicメソッドを含むインターフェイスをそれぞれ実装させることをお勧めします。 );。

何かをカスタマイズして、希望どおりに機能させる場合は、カスタムコードを作成する必要があります:)

于 2009-04-13T14:24:04.773 に答える
0

3.0 (リリース間近) を使用することにオープンな方であれば、これを行う TT テンプレートの修正に喜んで協力させていただきます (担当者の列は無視してください)。gmail の myname で私に Ping してください - 私はこれをやりたいと思っていました :)。

3.0 では、Linq と neq Query ツールを使用することもできますが、作業が中断されないようにしたいと思います。

于 2009-04-13T18:50:16.847 に答える