다음을 통해 공유


ADO.NET 자동 추적 엔터티 생성기 템플릿

이 항목에서는 Visual Studio 2010에 포함된 ADO.NET 자동 추적 엔터티 생성기 템플릿에 대해 간략하게 설명하고 이 텍스트 템플릿을 사용자 지정하는 방법을 보여 줍니다. ADO.NET 자동 추적 엔터티 생성기 템플릿은 형식화된 ObjectContext와 자동 추적 상태 논리를 포함하는 엔터티 클래스로 구성된 개체 계층 코드를 생성합니다. N 계층 응용 프로그램으로 작업하는 경우 자동 추적 엔터티를 사용합니다. 자세한 내용은 Working with Self-Tracking EntitiesWalkthrough: Serialize Self-Tracking Entities를 참조하십시오.

ADO.NET 자동 추적 엔터티 생성기 템플릿은 <model name>.tt 및 <model name>.Context.tt라는 두 가지 텍스트 템플릿 파일로 구성되어 있습니다. <model name>.Context.tt 템플릿은 형식화된 ObjectContext를 생성하고, <model name>.tt 템플릿은 자동 추적 엔터티 형식을 생성합니다.

두 텍스트 템플릿은 텍스트 템플릿 처리 엔진에 템플릿을 처리하는 방법을 지시하는 기본 제공 지시문으로 시작합니다. 두 텍스트 템플릿에는 .ttinclude 파일이 포함되어 있으며, .ttinclude 파일에는 ADO.NET 템플릿의 코드 생성 프로세스에 도움이 되는 유틸리티 클래스가 포함되어 있습니다. .ttinclude 파일에 대한 자세한 내용은 Entity Framework 유틸리티 .ttinclude 파일을 참조하십시오.

<#@ template language="VB" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.VB.ttinclude"#>
<#@ output extension=".vb"#>
<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>

다음으로, 이 코드에서는 .ttinclude 파일에 정의된 도우미 클래스를 인스턴스화하고 초기화합니다.

Dim code As New CodeGenerationTools(Me)
Dim ef As New MetadataTools(Me)
Dim loader As New MetadataLoader(Me)
Dim region As New CodeRegion(Me)

Dim fileManager As EntityFrameworkTemplateFileManager = EntityFrameworkTemplateFileManager.Create(Me)
CodeGenerationTools code = new CodeGenerationTools(this);
MetadataTools ef = new MetadataTools(this);
MetadataLoader loader = new MetadataLoader(this);
CodeRegion region = new CodeRegion(this);

EntityFrameworkTemplateFileManager fileManager = EntityFrameworkTemplateFileManager.Create(this);

또한 이 코드에서는 inputFile 문자열을 초기화합니다. .edmx 파일이 포함된 프로젝트에서 다른 프로젝트로 템플릿을 이동하는 경우 inputFile 문자열을 .edmx 파일의 상대 위치로 수정해야 합니다.

Dim inputFile As String = "SchoolModel.edmx"
string inputFile = @"SchoolModel.edmx";

다음 두 단원에서는 각 .tt 파일에서 생성하는 항목에 대해 설명합니다.

<model name>.Context.tt

<model name>.Context.tt 템플릿은 두 가지 소스 파일을 생성합니다. 이러한 소스 파일은 솔루션 탐색기에서 <model name>.Context.tt 파일 아래에 나타납니다.

  • <model name>.Context.cs(또는 vb)라는 파일. 생성된 소스 코드에는 형식화된 ObjectContext 클래스에 대한 정의가 포함됩니다. 정의에 포함되는 항목은 다음과 같습니다.

    • 생성자 오버로드. 생성자는 프록시 생성을 false로 설정하고 ObjectMaterializedEventHandler를 등록합니다. POCO(Plain Od CLR Object) 및 프록시 개체에 대한 자세한 내용은 Working with POCO Entities을 참조하십시오.

    • ObjectSet 속성

    • Function Import 메서드(개념적 모델에서 정의된 경우)

  • <model name>.Context.Extensions.cs(또는 vb)라는 파일. 생성된 소스 파일에는 두 가지 ApplyChanges 확장 메서드(하나는 ObjectContext용이고 다른 하나는 ObjectSet용임) 및 ApplyChanges 메서드를 지원하는 전용 메서드가 포함됩니다. ApplyChanges 메서드는 자동 추적 엔터티의 그래프에 있는 변경 내용 추적 정보를 검사하고 데이터베이스에 변경 내용을 반영하기 위해 수행해야 하는 작업 집합을 유추합니다.

<model name>.tt

<model name>.tt 템플릿은 여러 소스 파일을 생성합니다. 이러한 소스 파일은 솔루션 탐색기에서 <model name>.tt 파일 아래에 나타납니다.

  • 다음 항목이 포함된 <model name>.cs(또는 .vb)라는 파일

    • ObjectChangeTracker 도우미 클래스에 대한 정의. ObjectChangeTracker 인스턴스는 IObjectWithChangeTracker를 구현하는 형식의 모든 변경 내용에 대한 정보를 포함하고 추적합니다. ObjectChangeTracker는 자동 추적 개체에 대한 데이터 계약의 일부이므로 자동 추적 개체와 함께 serialize됩니다.

    • IObjectWithChangeTracker 인터페이스에 대한 정의. 이 인터페이스는 자동 추적 엔터티에 의해 구현되며 엔터티의 ObjectChangeTracker를 검색하기 위한 단일 읽기 전용 속성을 포함합니다.

    • ObjectChangeTracker를 통해 엔터티 상태를 조작할 수 있도록 허용하는 IObjectWithChangeTracker 형식에 대해 정의된 확장 메서드. 이러한 확장 메서드는 MarkAs[State], StartTracking, StopTrackingAcceptChanges입니다. 각 확장 메서드가 수행하는 작업에 대한 자세한 내용은 Working with Self-Tracking Entities을 참조하십시오.

    • ObservableCollection에서 파생되는 TTrackableCollection에 대한 정의. 컬렉션 탐색 속성이 있는 각 엔터티는 해당 탐색 속성에 대한 TTrackableCollection에 대해 CollectionChanged 이벤트의 처리기를 등록합니다. 이 처리기는 변경 내용 추적 및 관계의 양 End를 동기화하는 논리를 수행합니다.

    • INotifyComplexPropertyChanging 인터페이스에 대한 정의. 이 인터페이스는 복합 속성이 변경될 때 발생하는 이벤트를 제공합니다. 변경은 새 복합 형식 인스턴스를 복합 속성에 할당하는 것이거나 복합 형식 인스턴스의 스칼라 속성을 변경하는 것일 수 있습니다.

    • ObjectState 열거형에 대한 정의. ObjectState 열거자 목록은 Unchanged, Added, ModifiedDeleted 상수로 구성되어 있습니다.

    • ObjectChangeTracker 안에 상태 정보를 저장하는 데 사용되는 다른 형식이 이 파일에 있습니다. 자세한 내용은 생성된 <model name>.cs 또는 <model name>.vb 파일을 참조하십시오.

  • 개념적 모델에서 정의된 각 엔터티 형식 및 복합 형식의 파일은 <엔터티 또는 복합 형식 이름>.cs(vb)입니다.

    • 엔터티 형식은 Windows Forms, WPF 및 Silverlight에서 양방향 데이터 바인딩을 지원하기 위해 IObjectWithChangeTrackerINotifyPropertyChanged를 구현하는 부분 클래스입니다.

      DataContract 특성은 클래스가 serialize될 수 있도록 허용하기 위해 클래스의 맨 위에 추가됩니다. 또한 IsReference = trueDataContract 특성에 대해 지정됩니다. 이는 이 형식의 serialization이 전체 serialization임을 의미합니다.

      KnownType 특성이 클래스의 맨 위에 추가됩니다. 이 엔터티 형식에 탐색 속성이 있는 형식마다 KnownType 특성이 하나씩 있습니다.

      엔터티 클래스의 정의에는 기본 속성, 복합 속성, 탐색 속성, ChangeTracker 속성 및 관계 동기화 논리에 도움이 되는 메서드가 포함됩니다.

    • 복합 형식은 INotifyComplexPropertyChangingINotifyPropertyChanged를 구현하는 부분 클래스입니다.

개체 계층 코드 사용자 지정

개체 계층 코드가 생성되는 방법을 사용자 지정하려면 .tt 파일을 수정해야 합니다. 형식화된 개체 컨텍스트의 이름을 수정할 수 있습니다. 즉, 엔터티 형식의 새 속성 또는 특성을 추가하거나 기존 속성 또는 특성을 수정할 수 있으며 엔터티 형식이 일부 인터페이스에서 상속하게 할 수 있습니다.

개체 계층 코드를 사용자 지정하려면 .tt 파일의 텍스트 블록을 수정합니다. 텍스트 블록은 <##> 태그 밖에서 정의됩니다. 형식화된 개체 컨텍스트의 이름을 변경하려면 <model name>.Context.tt 파일을 열고 모든 <#=code.Escape(container)#> 바로 앞에 단어(예: My)를 추가합니다. 이렇게 하면 .edmx 파일에서 컨테이너 이름이 SchoolEntities인 경우 생성된 코드에서 컨테이너 이름은 MySchoolEntities가 됩니다.

자세한 내용은 방법: 개체 계층 코드 생성 사용자 지정(엔터티 데이터 모델 디자이너)을 참조하십시오.

참고 항목

개념

Entity Framework 유틸리티 .ttinclude 파일

기타 리소스

Working with Self-Tracking Entities
Walkthrough: Serialize Self-Tracking Entities