6

私はSubsonic2.2を使い始めたばかりで、これまでのところ非常に感銘を受けています。これにより、コーディングにかかる​​時間を大幅に節約できると思います。

私がそれをフルタイムで使用することに飛び込む前に、私が整理したい何かが私を悩ませていますが。

現在のデータベース(SQL2008 db)では、テーブル、ビュー、spsなどをスキーマ/所有者名ごとに別々のチャンクに分割しているため、すべての顧客テーブルが顧客に含まれています。スキーマ、製品内の製品。スキーマなどなので、customersaddressテーブルから選択するにはselect*fromcustomer.addressを実行します

残念ながら、Subsonicはスキーマ/所有者名を無視し、ベーステーブル名を教えてくれます。スキーマ間に重複がないため(たとえば、Customer.AddressとSupplier.Addressの両方が存在しないため)、これは問題ありませんが、スキーマで分割できれば、コードがより明確になると思います。

理想的には、スキーマ/所有者によって名前空間を変更できるようにしたいと思います。これにより、SubSonicへの影響は最小限に抑えられますが、結果のコードは読みやすくなります。

問題は、Subsonicソース全体をクロールしていて、これを行う方法がわからないことです(C#ではなくVBでコーディングするのは役に立ちません=はい、ZXSpectrumのせいです!!)

誰かが以前にこれに取り組んだことがあるか、それを解決する方法についてアイデアを持っているなら、私は本当に感謝しています、

前もって感謝します。

エド

4

4 に答える 4

6

マルチプロバイダーアプローチも提案するつもりでした。しかし、配管の多くはすでに所有権のために亜音速になっています。CS_ClassTemplate.aspxの数行を編集すると、所有者プロファイルごとに名前空間を作成できます。58行目(私はv2.1を使用しています)を次のように変更します

namespace <%=provider.GeneratedNamespace%><%=owner%>

所有者はどこですか

string owner = "." + tbl.SchemaName;
if(owner == ".dbo")
  owner = "";

これを14行目あたりに配置します。このようにして、Northwind.Suppliers、Northwind.Customersなどのすべての所有者の名前空間を設定できます。dboをNorthwindのままにして、すべてのテストを編集せずにコンパイルできるようにしました。単純な選択クエリを実行しましたが、希望どおりに機能すると思います。

于 2009-04-16T08:39:31.253 に答える
3

これは、3.0でもt4テンプレートを使用して行うことができます(ただし、3.5のみです)。これは本当に良いフィードバックです-おそらくデフォルトでこれを組み込む必要があります!

ここで助けてくれてうれしいです。

于 2009-04-16T18:10:22.937 に答える
1

次のように、同じ基盤となるデータベース接続を持つ別々のプロバイダーを試してみることができます。

<SubSonicService defaultProvider="DBData">
<providers>
<clear/>
     <add name="DBData" type="Subsonic.SqlDataProvider, SubSonic" connectionStringName="LocalSqlServer" generatedNamespace="DBData" includeTableList="table_a,table_b" spStartsWith="app,get,set" viewStartsWith="v_" />
     <!--CMS Provider-->
     <add name="CMS" type="SubSonic.SqlDataProvider, SubSonic" connectionStringName="LocalSqlServer" generatedNamespace="CMS" stripTableText="CMS_" includeTableList="CMS_Content,CMS_Page" useSPs="false"/>
</providers>
</SubSonicService>

このようにスキーマ自体をキーとして使用できるとは思いませんが、少なくともincludeTableListとgeneratedNamespaceの組み合わせで問題を回避することはできます。異なるスキーマ間で重複するテーブル名がないため、機能する可能性があるとのことです。

于 2009-04-16T07:53:16.077 に答える
1

これが機能していることをお知らせします。少なくとも、コンパイルします。:-)所有者ソリューションを完全に機能させるには、クラステンプレートにさらに変更を加える必要があります。そうしないと、テーブル/キー関数が間違った名前空間内に配置されます。

また、ストアドプロシージャテンプレートをハックしました。所有者ごとに別々のファイル/名前空間に分割する方法を(短時間で)理解できなかったため、代わりに各sp関数の前に所有者とアンダースコアを付けました。

ただし、同じ問題が発生した場合に備えて、修正の可能性があることがわかります。

エド

于 2009-04-16T10:47:22.890 に答える