Entity Framework 公用程式 .ttinclude 檔案
本主題將提供包含公用程式類別之 .ttinclude 檔案的概觀,而這些類別可協助 ADO.NET 範本進行程式碼產生處理序。 這個檔案是由 ADO.NET EntityObject Generator 範本和ADO.NET 自我追蹤實體產生器範本範本所使用。 您不應該修改 .ttinclude 檔案。 不過,您可以在自己的範本中使用這個檔案所定義 Helper 函式。
.ttinclude 檔案的 Visual Basic 和 C# 版本會與 Microsoft Visual Studio 2010 一起安裝,位於 <Visual Studio 安裝路徑>\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes 目錄中。
若要在其他文字範本中加入此檔案,請使用 Include 指示詞。 當您將 Include 指示詞加入至文字範本時,系統就會合併所加入之檔案的公用 API 與文字範本中的程式碼。 Include 指示詞會接受具有完整路徑的檔案名稱,也接受只有所加入之檔案的名稱。 如果您只有指定名稱,文字範本轉換引擎就會搜尋已知的位置,以便找出此檔案。 如需詳細資訊,請參閱 HOW TO:在文字範本中加入檔案 (英文)。 在下列範例中,只有指定了 .ttinclude 檔案的名稱:
<#@ include file="EF.Utility.CS.ttinclude"#>
在 .ttinclude 中定義的類別
在文字範本中,Helper 函式會用類別功能區塊括住。 類別功能區塊的前後具有 <#+ 和 #> 標記。 這個 .ttinclude 檔案中的程式碼會使用 .NET Framework 型別。 因此,這個檔案的開頭會包含適當的組件和 .NET Framework 命名空間。 如需使用文字範本的詳細資訊,請參閱產生成品 (英文)。
下面是一些在 EF.Utility.CS.ttinclude 檔案中定義之公用類別的清單,以及說明 [ADO.NET EntityObject Generator] 和 [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 中繼資料的 Helper 方法。
<#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 方法的參數收集在一起。 下列範例會對概念模型中定義的函式匯入集合執行迴圈,並且收集每個函式的必要參數。
<#
foreach (EdmFunction edmFunction in container.FunctionImports)
{
IEnumerable<FunctionImportParameter> parameters =
FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
. . . }
#>