Entity Framework 유틸리티 .ttinclude 파일
이 항목에서는 ADO.NET 템플릿의 코드 생성 프로세스에 도움이 되는 유틸리티 클래스를 포함하는 .ttinclude 파일에 대해 간략하게 설명합니다. 이 파일은 ADO.NET EntityObject 생성기 템플릿 및 ADO.NET 자동 추적 엔터티 생성기 템플릿 템플릿에서 사용됩니다. .ttinclude 파일은 수정하면 안 됩니다. 그러나 사용자 고유의 템플릿에서 이 파일에 정의된 도우미 함수를 사용할 수 있습니다.
Visual Basic 및 C# 버전의 .ttinclude 파일은 Microsoft Visual Studio 2010과 함께 <Visual Studio 설치 경로>\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes 디렉터리에 설치됩니다.
Include 지시문을 사용하여 다른 텍스트 템플릿에 이 파일을 포함할 수 있습니다. Include 지시문을 텍스트 템플릿에 추가하면 포함된 파일의 공용 API가 텍스트 템플릿의 코드와 병합됩니다. Include 지시문은 전체 경로가 포함된 파일 이름이나 포함된 파일의 이름만 받아들입니다. 이름만 지정하는 경우 텍스트 템플릿 변환 엔진은 잘 알려진 위치를 검색하여 파일을 찾습니다. 자세한 내용은 How to: Include Files in Text Templates를 참조하십시오. 다음 예제에서는 .ttinclude 파일의 이름만 지정되어 있습니다.
<#@ include file="EF.Utility.CS.ttinclude"#>
.ttinclude에서 정의된 클래스
텍스트 템플릿에서 도우미 함수는 클래스 기능 블록으로 묶입니다. 클래스 기능 블록은 <#+ 및 #> 태그로 둘러싸입니다. 이 .ttinclude 파일의 코드에서는 .NET Framework 형식을 사용합니다. 따라서 적절한 어셈블리와 .NET Framework 네임스페이스가 파일의 시작 부분에 포함됩니다. 텍스트 템플릿으로 작업하는 방법은 Generating Artifacts를 참조하십시오.
아래에는 EF.Utility.CS.ttinclude 파일에서 정의된 일부 공용 클래스의 목록과 이러한 클래스를 ADO.NET EntityObject 생성기 및 ADO.NET 자동 추적 엔터티 생성기 템플릿에서 사용하는 방법에 대한 간단한 예제가 나와 있습니다.
CodeGenerationTools - 올바르게 형식이 지정되고 제대로 작동하는 소스 코드를 만드는 데 도움을 줍니다.
entiy
이름이 Course인 경우 다음 코드에서는 CodeGenerationTools 형식의 code
개체를 사용하여 public partial class Course: IObjectWithChangeTracker, INotifyPropertyChanged
출력을 대상 소스 파일에 생성합니다.
<#=Accessibility.ForType(entity)#>
<#=code.SpaceAfter(code.AbstractOption(entity))#>partial class
<#=code.Escape(entity)#><#=code.StringBefore(" : ",
code.Escape(entity.BaseType))#><#=entity.BaseType == null ? " : " :
", "#>IObjectWithChangeTracker, INotifyPropertyChanged
MetadataTools - 코드 생성에 필요한 Entity Framework 메타데이터에 액세스하는 도우미 메서드를 포함합니다.
<#MetadataTools ef = new MetadataTools(this);
if (ef.IsKey(edmProperty))
#>
MetadataLoader - .edmx 또는 .csdl 파일에서 EdmItemCollection, StoreItemCollection 및 StorageMappingItemCollection 개체를 로드합니다. 다음 예제에서는 MetadataLoader 개체를 초기화하고 메타데이터를 metadataWorkspace
개체로 로드합니다.
<#MetadataLoader loader = new MetadataLoader(this);
string inputFile = @"SchoolModel.edmx";
MetadataWorkspace metadataWorkspace = null;
bool allMetadataLoaded =loader.TryLoadAllMetadata(inputFile, out metadataWorkspace);
#>
Accessibility - Entity Framework 메타데이터에서 코드 생성 주석의 검색 및 변환을 코드 생성에 유용한 형식으로 캡슐화하는 정적 클래스입니다. CodeGenerationTools 클래스 설명과 함께 포함된 예제를 참조하십시오.
CodeRegion - 소스 코드 영역을 만듭니다. 다음 코드에서는 CodeRegion을 사용하여 #region Primitive Properties
출력을 대상 소스 파일에 생성합니다.
<#CodeRegion region = new CodeRegion(this, 1);
... region.Begin("Primitive Properties");
#>
영역에 대한 소스 코드가 생성되지 않는 경우 영역이 생성되지 않습니다.
EntityFrameworkTemplateFileManager - 생성된 코드의 다양한 섹션을 여러 파일로 분할합니다. 텍스트 템플릿 기술이 여러 파일 생성을 지원하지 않기 때문에 여러 파일에 작성하는 템플릿에서는 이 클래스를 사용합니다. 텍스트 템플릿이 Visual Studio 프로젝트의 일부인 경우 생성된 소스 파일이 템플릿 파일의 종속 파일로 추가됩니다. 다음 예제에서는 EntityFrameworkTemplateFileManager를 사용하여 엔터티 형식 정의를 여러 파일에 출력합니다.
<#EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);#>
. . . <#
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(namespaceName, code);
WriteEntityTypeSerializationInfo(entity, ItemCollection, code, ef);
#>
FunctionImportParameter - 해당 메서드 매개 변수와 ExecuteFunction 메서드로 전송되어야 하는 매개 변수를 함께 수집합니다. 다음 예제에서는 개념적 모델에서 정의된 Function Import의 컬렉션을 반복하고 각 함수에 필요한 매개 변수를 수집합니다.
<#
foreach (EdmFunction edmFunction in container.FunctionImports)
{
IEnumerable<FunctionImportParameter> parameters =
FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
. . . }
#>