2009-04-16 7 views
6

私はSubsonic 2.2を使い始めましたが、これまでのところ非常に感銘を受けました。深刻なコーディング時間を節約できると思います。亜音速 - 名前空間の一部としてSQLスキーマ/所有者名を使用するには?

私はそれをフルタイムで使用することに入る前に、私は整理したいと思うものがあります。

現在のデータベース(SQL2008 db)では、テーブル、ビュー、spsなどをスキーマ/所有者名で別々の塊に分割しているため、すべての顧客テーブルが顧客にあります。スキーマ、製品内の製品。スキーマなど、私は顧客のアドレステーブルから選択する*私はcustomer.addressからselect *を行うだろう

残念ながら、Subsonicはスキーマ/所有者名を無視し、私に基本テーブル名を与えます。これは、スキーマ間で重複がないため(例:Customer.AddressとSupplier.Addressは両方とも存在しないため)、スキーマで分割できればコードが明確になると感じています。

理想的には、スキーマ/所有者によって名前空間を変更したいと思っています。これはSubSonicにはほとんど影響がなく、結果のコードを読みやすくします。

問題は、私はSubsonicソース全体をクロールしており、これを行う方法を手がかりにしていません(VBでコード化するのに役立たないのはC#=はい私は知っている、誰もが前にこれを取り組んだか、それを解決する方法についてのアイデアを持っている場合は、私は本当に感謝されると思います)

、事前に

感謝。

エド

答えて

6

私は複数のプロバイダーアプローチも提案するつもりでした。 しかし、配管の多くはすでに所有権のために亜音速である。 CS_ClassTemplate.aspxの2行を編集する場合は、各所有者プロファイルの名前空間を作成できます。

namespace <%=provider.GeneratedNamespace%><%=owner%> 
所有者は、あなたは、すべての名前空間を持つことができます。この方法では、ライン14の周りに、上記のことを置く

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

ある

に線58の周りの変更(私はV2.1を使用しています)所有者: Northwind.Suppliers、Northwind.Customersなど dboをちょうどNorthwindとして残して、すべてのテストを大量に編集することなくコンパイルしました。 私は単純な選択クエリを実行し、私はそれがあなたが望むように動作すると思います。

+0

ODSControllerとStructsのジェネレータも少し変更する必要がありますが、それはとても簡単です。 –

+0

私は似たような状況に陥っています。しかし、異なるスキーマに同じ名前のテーブルがあると、さらに複雑になります。その周りには道がありますか? – Muxa

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の組み合わせでこの問題を回避することができます。あなたは、異なるスキーマ間でテーブル名が重複していないと言っているので、うまくいくかもしれません。

+0

こんにちは、すばやい返信ありがとう:-)私は6つのスキーマがあります。ビットは同じdbへの6つの別々の接続を心配しました。 – CResults

1

私はこれが現在動作していることを知ってもらいました - 少なくとも、コンパイルしてください! :-)クラステンプレートを変更する必要がありますが、所有者のソリューションを完全に稼働させるには、テーブル/キー関数が間違った名前空間に収まるようにします。

また、ストアドプロシージャテンプレートをハッキングしました。私は短期間に私が各所有者のために別々のファイル/名前空間に分割する方法を考え出すことができなかったので、代わりに私は各sp関数の前に所有者とアンダースコアを付けました。

ただし、同じ問題が発生した場合に備えて、修正することが可能です。

エド

3

あなたは私たちのT4テンプレートを使用してだけでなく3.0でこれを行うことができます(それだけで3.5です)。これは本当に良いフィードバックです。おそらくこれをデフォルトで構築する必要があります。

ここで何か助けてください。

関連する問題