Общие сведения об TTINCLUDE-файле (платформа Entity Framework)
В данном разделе приведены общие сведения о TTINCLUDE-файле, который содержит классы приложения, работающие вместе с шаблонами ADO.NET в процессе создания кода. Этот файл используется шаблоном Шаблон генератора ADO.NET EntityObject и шаблоном Шаблон генератора сущностей с самостоятельным отслеживанием ADO.NET. Не следует изменять TTINCLUDE-файл. Однако вспомогательные функции, определенные в этом файле, можно использовать в пользовательских шаблонах.
Версии TTINCLUDE-файла для Visual Basic и C# устанавливаются вместе с Microsoft Visual Studio 2010 в папке <путь установки Visual Studio>\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes.
Используйте директиву Include для включения файла в другие текстовые шаблоны. При добавлении директивы Include в текстовый шаблон система объединяет открытые API-интерфейсы включенных файлов и код в текстовом шаблоне. Директива Include принимает имя файла с полным путем или только имя включенного файла. Если указать только имя, система преобразования текстовых шаблонов выполняет поиск файла по известным расположениям. Дополнительные сведения см. в разделе Как включить файлы в текстовые шаблоны. В следующем примере для атрибута задано только имя TTINCLUDE-файла.
<#@ include file="EF.Utility.CS.ttinclude"#>
Классы, заданные в TTINCLUDE-файле
Вспомогательные функции включаются в функциональные блоки в текстовых шаблонах. Функциональные блоки классов заключаются в теги <#+ и #>. Код в этом TTINCLUDE-файле использует типы платформы .NET Framework. Поэтому соответствующие сборки и пространства имен .NET Framework включаются в начало файла. Дополнительные сведения о работе с текстовыми шаблонами см. в разделе Создание артефактов.
Ниже приводится список некоторых открытых классов, определенных в TTINCLUDE-файле EF.Utility.CS и краткие примеры того, как классы используются в шаблонах Генератора ADO.NET EntityObject и Генератора сущностей с самостоятельным отслеживанием ADO.NET.
CodeGenerationTools — отвечает за помощь в создании исходного кода с правильными форматированием и функционалом.
Учитывая, что имя entiy
является Course, следующий код использует объект code
типа CodeGenerationTools для создания вывода 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 — отвечает за загрузку методов EdmItemCollection, StoreItemCollection и StorageMappingItemCollection из EDMX-файла или CSDL-файла. В следующем примере показана инициализация объекта 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);
. . . }
#>
См. также
Основные понятия
Шаблон генератора ADO.NET EntityObject
Шаблон генератора сущностей с самостоятельным отслеживанием ADO.NET