이 설명서는 보관되지만 유지 되지 않습니다.

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

Visual Studio 2010

이 항목에서는 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="C#" debug="false" hostspecific="true"#>
<#@ include file="EF.Utility.CS.ttinclude"#>
<#@ output extension=".cs"#>

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

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 파일의 상대 위치로 수정해야 합니다.

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가 됩니다.

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

참고 항목

표시: