File con estensione ttinclude dell'utilità Entity Framework

In questo argomento viene fornita una panoramica del file con estensione ttinclude contenente classi di utilità che supportano i modelli ADO.NET nel processo di generazione di codice. Tale file viene utilizzato dai modelli Modello ADO.NET EntityObject Generator e Modello Generatore di entità con rilevamento automatico ADO.NET. Non è consigliabile modificare il file con estensione ttinclude. È tuttavia possibile utilizzare nei propri modelli le funzioni di supporto definite in questo file.

Le versioni Visual Basic e C# del file con estensione ttinclude vengono installate con Microsoft Visual Studio 2010, nella directory <percorso di installazione di Visual Studio>\Common7\IDE\Extensions\Microsoft\Entity Framework Tools\Templates\Includes.

Utilizzare la direttiva Include per includere il file negli altri modelli di testo. Quando si aggiunge la direttiva Include a un modello di testo, il sistema unisce le API pubbliche del file incluso con il codice nel modello di testo. La direttiva Include accetta un nome file con il percorso completo oppure solo il nome del file incluso. Se si specifica solo il nome, il motore di trasformazione del modello di testo eseguirà ricerche nei percorsi noti per trovare il file. Per ulteriori informazioni, vedere Procedura: includere file nei modelli di testo. Nell'esempio seguente viene specificato solo il nome del file con estensione ttinclude:

<#@ include file="EF.Utility.CS.ttinclude"#>

Classi definite nel file con estensione ttinclude

Nei modelli di testo le funzioni di supporto sono incluse in blocchi di funzionalità di classe. I blocchi di funzionalità di classe sono racchiusi tra i tag <#+ e #>. Il codice incluso in questo file con estensione ttinclude utilizza tipi .NET Framework. All'inizio del file sono pertanto inclusi gli assembly adatti e gli spazi dei nomi .NET Framework. Per ulteriori informazioni sull'utilizzo dei modelli di testo, vedere Generazione di elementi.

Di seguito viene riportato l'elenco di alcune classi pubbliche definite nel file EF.Utility.CS.ttinclude, nonché brevi esempi di come le classi vengono utilizzate dai modelli ADO.NET EntityObject Generator e Generatore di entità con rilevamento automatico ADO.NET.

CodeGenerationTools : consente di creare codice sorgente funzionale e correttamente formattato.

Se il nome dell'oggetto entiy è Course, nel codice seguente viene utilizzato l'oggetto code del tipo CodeGenerationTools per generare l'output di public partial class Course: IObjectWithChangeTracker, INotifyPropertyChanged nel file di origine di destinazione.

<#=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: contiene metodi di supporto che consentono di accedere ai metadati di Entity Framework necessari per la generazione di codice.

<#MetadataTools ef = new MetadataTools(this);
if (ef.IsKey(edmProperty))
    
#>

MetadataLoader: responsabile del caricamento degli oggetti EdmItemCollection, StoreItemCollection e StorageMappingItemCollection da un file con estensione edmx o csdl. Nell'esempio seguente viene inizializzato l'oggetto MetadataLoader e vengono caricati i metadati nell'oggetto metadataWorkspace.

<#MetadataLoader loader = new MetadataLoader(this);
string inputFile = @"SchoolModel.edmx";
MetadataWorkspace metadataWorkspace = null;
bool allMetadataLoaded =loader.TryLoadAllMetadata(inputFile, out metadataWorkspace);
#>

Accessibility: classe statica che incapsula il recupero e la conversione delle annotazioni di generazione di codice nei metadati di Entity Framework in un formato che si rivela utile nella generazione di codice. Vedere l'esempio incluso con la descrizione della classe CodeGenerationTools.

CodeRegion: responsabile della creazione di aree del codice sorgente. Il codice seguente utilizza l'oggetto CodeRegion per generare l'output di #region Primitive Properties nel file di origine di destinazione.

<#CodeRegion region = new CodeRegion(this, 1);
...  region.Begin("Primitive Properties");
#>  

L'area non verrà generata se per l'area non viene generato alcun codice sorgente.

EntityFrameworkTemplateFileManager: consente di suddividere le varie sezioni del codice generato in file separati. I modelli che scrivono in più file utilizzano questa classe in quanto la tecnologia del modello di testo non supporta la generazione di più file. Se un modello di testo è parte di un progetto Visual Studio, i file di origine generati vengono aggiunti come oggetti dipendenti del file modello. Nell'esempio seguente viene utilizzato EntityFrameworkTemplateFileManager per restituire definizioni dei tipi di entità in file separati.

<#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: responsabile della raccolta dei parametri di metodo e dei parametri che devono essere inviati al metodo ExecuteFunction. Nell'esempio seguente viene eseguito il ciclo nella raccolta delle importazioni di funzioni definite nel modello concettuale e vengono raccolti i parametri necessari per ogni funzione.

<#
foreach (EdmFunction edmFunction in container.FunctionImports)
{
    IEnumerable<FunctionImportParameter> parameters = 
        FunctionImportParameter.Create(edmFunction.Parameters, code, ef);
.  .  .  }
#>  

Vedere anche

Concetti

Modello ADO.NET EntityObject Generator
Modello Generatore di entità con rilevamento automatico ADO.NET