2009-04-16 21 views
6

Właśnie zacząłem używać Subsonic 2.2 i do tej pory byłem pod dużym wrażeniem - pomyśl, że zaoszczędzi mi to trochę czasu na kodowanie.Subsonic - Jak korzystać z SQL Schema/Owner name jako części przestrzeni nazw?

Zanim zacznę korzystać z niego w pełnym wymiarze godzin, chociaż coś mnie dręczy, co chciałbym rozwiązać.

W mojej bieżącej bazie danych (SQL2008 db) podzieliłem tabele, widoki, sps itp. Na osobne części według schematu/nazwy właściciela, więc wszystkie tabele klientów znajdują się w kliencie. Schemat, produkty w produkcie. schematu itp., więc aby wybrać z tabeli adresów klientów, wybrałbym * od klienta.address

Niestety, Subsonic ignoruje nazwę schematu/właściciela i podaje mi nazwę tabeli podstawowej. Jest to w porządku, ponieważ nie mam żadnych duplikatów między schematami (np. Customer.Address i Supplier.Address nie istnieją), ale uważam, że kod mógłby być bardziej przejrzysty, gdybym mógł dzielić się według schematu.

Idealnie chciałbym móc zmienić przestrzeń nazw według schematu/właściciela - myślę, że to miałoby najmniejszy wpływ na SubSonic, ale sprawiłoby, że wynikowy kod byłby łatwiejszy do odczytania.

Problem polega na tym, że przeszukałem całe źródło Subsonic i nie mam pojęcia, jak to zrobić (nie pomaga, że ​​koduję w VB, nie C# = tak wiem, winię ZX Spectrum !!)

Jeśli ktoś rozwiązać ten przed lub ma pomysł, jak go rozwiązać, byłbym naprawdę wdzięczny,

góry dzięki.

Ed

Odpowiedz

6

Chciałbym zasugerować również podejście wielu dostawców. Ale wiele instalacji jest już w poddźwiękowych na własność. Jeśli edytujesz kilka linii w CS_ClassTemplate.aspx, możesz utworzyć obszar nazw dla każdego profilu właściciela. Zmień wokół linii 58 (Używam v2.1) do

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

gdzie właściciel jest

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

umieścić że się wyżej, wokół linii 14. W ten sposób można mieć nazw dla każdego właściciel, taki jak: Northwind.Suppliers, Northwind. Klienci, itp. Zostawiłem dbo jako Northwind, więc wszystkie testy będą się kompilować bez konieczności edycji. Uruchomiłem proste zapytanie i myślę, że będzie działać tak, jak chcesz.

+0

Trzeba też trochę zmodyfikować generator ODSController i Structs, ale to bardzo proste. –

+0

Mam podobną sytuację. Jednak jest to jeszcze bardziej skomplikowane, ponieważ niektóre tabele mają tę samą nazwę w różnych schematach. Czy jest jakiś sposób obejścia tego? – Muxa

1

Można spróbować zrobić osobne dostawców, które mają taką samą podstawową połączenia z bazą danych, tak jak poniżej:

<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> 

Nie sądzę, można użyć samego schematu jako klucz w ten sposób , ale możesz przynajmniej obejść ten problem, używając kombinacji includeTableList i generatedNamespace. Powiedziałeś, że nie masz zduplikowanych nazw tabel w różnych schematach, więc może to zadziałać.

+0

Cześć, dziękuję za szybką odpowiedź :-) Mam 6 schematów w sumie od intensywnie używanych do lekkich (konfiguracja rzeczy). Trochę martwiło się o 6 oddzielnych połączeń do tej samej bazy danych. Mały facet z tyłu mojej głowy mówiąc, że to zły pomysł, ale nie jestem pewien ... – CResults

1

Po prostu informuję, że mam to teraz działa - a przynajmniej kompiluje! :-) Aby uzyskać pełne rozwiązanie dla właściciela, musisz wprowadzić więcej zmian w szablonie klas, ponieważ w przeciwnym razie funkcje tabeli/klucza znajdują się w niewłaściwym obszarze nazw.

Udało mi się też zhakować za pomocą szablonu procedury składowanej.Nie mogłem (w krótkim czasie) opracować sposobu podziału na oddzielne pliki/przestrzenie nazw dla każdego właściciela, więc zamiast tego dodałem każdą funkcję sp z właścicielem i podkreśleniem.

Jednak na wypadek, gdy masz ten sam problem, będziesz wiedział, że można go naprawić.

Ed

3

Można to zrobić w wersji 3.0, a także przy użyciu naszych szablonów t4 (ale to tylko 3.5). To naprawdę dobra informacja - powinniśmy to domyślnie zbudować!

Cieszę się, że masz tu pomoc.