2011-09-20 4 views
3

우리는 사용자의 검색어를 구문 분석하고 T-SQL이 아닌 독점적 SQL과 유사한 쿼리 언어 인 SQL 형식을 생성해야하는 쿼리 서비스를 구축하고 있습니다 그것. SQL을 생성하기 위해 T4 템플릿을 살펴 보았습니다.t4 템플릿을 사용하여 런타임시 메모리 내장 SQL 생성

나는 여기 Creating T4 templates at runtime (build-time)에 또 다른 질문을 들었다. 나는 기본적인 생각을 이해한다; 그러나 우리가 필요로하는 것은 이고 실제 파일 출력은이 아니지만 최종 SQL 문을 포함하는 간단한 메모리 문자열입니다. 그게 가능합니까?

내가 가지고있는 두 번째 질문은 T4 템플릿 파일에서 SQL을 생성하는 데 필요한 다소 복잡한 로직을 고려할 때 T4의 처리 속도가 얼마나 더 중요한지에 관한 것입니다. 감사합니다. .

답변

2

전처리 된 템플릿 (일명 런타임 템플릿)을 살펴보고 싶다고 생각하는 내용. 텍스트 템플릿 전처리 템플릿을 사용하여 Visual Studio 2010에서 템플릿을 만듭니다. 마지막 I 사용

partial class MyTemplate 
{ 
    int HowManyCommentsToGenerate; 

    public MyTemplate (int count) 
    { 
     HowManyCommentsToGenerate = count; 
    } 
} 

:

<#@ template language="C#"#> 
<# 
    for (var iter = 0; iter < HowManyCommentsToGenerate; ++iter) 
    { 
#> 
    // <#=iter#> 
<# 
    } 
#> 

내가 HowManyCommentsToGenerate 필드 생성 된 클래스를 확장이 부분 클래스 추가 :이 매우 간단한 서식을 작성

은 (I는 MyTemplate.tt로 명명) 그것은 좋아한다. (출력은 파일이 아니라 문자열이다.) :

class Program 
{ 
    static void Main(string[] args) 
    { 
     var str = new MyTemplate(32); 
     Console.Write(str.TransformText()); 
    } 
} 

멀리 성능으로 솔직히 런타임 템플릿에 대한 충분한 경험이 없기 때문에이 점에 대해 조언을드립니다. 생성 된 코드를 읽고 프로파일 링하는 것이 좋습니다.

+0

고마워요! 그게 효과가있어! 그것은 또한 T4 템플릿이 우리가 얻으려고하는 것에 정말로 적합하지 않다는 것을 보여주었습니다. 파일이 필요 없다면 SQL을 생성하는 것이 전혀 불가능하다고 생각하십니까? 나에게 그것은 SQL 생성 로직을 별도의 클래스에 넣어야하는 것처럼 보입니다. T4는 처리하기 까다 롭습니다. 그냥 StringBuilder 또는 뭔가를 사용하십시오. – John

+0

T4가 너무 좋지만 표현식에서 매우 동적 인 SQL을 생성하는 데 올바른 툴이라고 확신하지 못합니다. 성가신 것 같아요 문자열 작성자 선호하는 경우 StringBuilder 이동하십시오. T4를 사용할 필요가 없습니다. 그러나 어떤 경우에는 런타임 템플릿이 매우 유용 할 수 있습니다. 예를 들어, 정적 컨텐츠와 동적 컨텐츠를 혼합하려는 경우. – FuleSnabel

+0

FuleSnabel과 함께 동적 및 정적의 혼합이 스위트 스폿이라는 것에 동의했습니다. 입력 된 검색어에 따라 SQL 틱 언어의 거의 모든 요소가 가변적이라면 실제로 하나의 ADT를 특정 구문에서 다른 구문으로 변환하는 것입니다. 반면에 출력 sql에 중요한 상용구가 있고 쿼리 용어로 매개 변수화 된 경우 T4를 선택하는 것이 좋습니다. – GarethJ

관련 문제