2009-04-16 2 views
6

방금 ​​Subsonic 2.2를 사용하기 시작했으며 지금까지 매우 인상 깊었습니다. 심각한 코딩 시간을 절약 해줄 것이라고 생각합니다.Subsonic - SQL 스키마/소유자 이름을 네임 스페이스의 일부로 사용하는 방법?

나는 그것을 풀 타임으로 사용하기에 앞서, 나는 밖으로 나가고 싶다.

내 현재 데이터베이스 (SQL2008 db)에서 스키마/소유자 이름별로 테이블, 뷰, sps 등을 분할하여 모든 고객 테이블을 고객에게 제공합니다. 스키마, 제품의 제품. 스키마 등, 고객 주소 테이블에서 선택할 수 있도록 선택하십시오 * customer.address에서

아쉽게도 Subsonic은 스키마/소유자 이름을 무시하고 기본 테이블 이름을 제공합니다. 스키마간에 중복이 없으므로 괜찮습니다 (예 : Customer.Address와 Supplier.Address가 둘 다 존재하지 않음). 스키마로 분할 할 수 있다면 코드가 명확해질 수 있다고 생각합니다.

이상적으로 나는 스키마/소유자별로 네임 스페이스를 변경할 수 있기를 원합니다 - 이것은 SubSonic에 최소한의 영향을 미치지 만 결과 코드를 읽기 쉽게 만듭니다.

문제는 Subsonic 소스 전체를 크롤링했는데이를 수행하는 방법을 알지 못합니다 (VB에서 코드를 작성하는 데 도움이되지 않습니다. C# = 예, 알고 있습니다, ZX 스펙트럼을 비난! 누군가가 전에 태클 또는 그것을 해결하는 방법에 대한 아이디어가 있다면, 정말 감사하게 될 거라고)

, 사전에

감사합니다.

에드

답변

6

나는 여러 공급자 접근법을 제안하려고했습니다. 그러나 많은 배관 공사가 소유권을 위해 이미 아음속 상태입니다. CS_ClassTemplate.aspx에서 몇 줄을 편집하면 각 소유자 프로필에 대한 네임 스페이스를 만들 수 있습니다. 당신은 라인 (14)이 방법은 주위에, 위의 것을 넣어

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

소유자 인

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

에 라인 (58) (나는 2.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 함수 앞에 소유자와 밑줄을 붙였다.

그러나 동일한 문제가 발생하는 경우를 대비하여 해결할 수 있음을 알 수 있습니다.

에드 당신은 우리의 T4 템플릿을 사용뿐만 아니라 3.0에서이 작업을 수행 할 수

3

(그러나 그것은 단지 3.5이다). 이것은 피드백의 정말 좋은 비트입니다 - 우리는 기본적으로 이것을 빌드해야합니다!

여기에 도움이되어 주어서 다행입니다.

관련 문제