Entity Framework
.t4-Vorlagen im Entity-Framework
Suche…
Schnittstellen dynamisch zum Modell hinzufügen
Wenn Sie mit einem vorhandenen Modell arbeiten, das recht groß ist und in Fällen, in denen eine Abstraktion erforderlich ist, häufig regeneriert wird, ist es möglicherweise kostspielig, das Modell mit Schnittstellen manuell zu überarbeiten. In solchen Fällen möchten Sie möglicherweise zur Modellgenerierung dynamisches Verhalten hinzufügen.
Das folgende Beispiel zeigt, wie automatisch Schnittstellen zu Klassen hinzugefügt werden, die bestimmte Spaltennamen haben:
In Ihrem Modell gehen .tt
Datei ändern Sie die EntityClassOpening
Methode in folgenden Weise wird dieser Add IPolicyNumber
Schnittstelle auf Unternehmen , die haben POLICY_NO
Spalt und IUniqueId
auf UNIQUE_ID
public string EntityClassOpening(EntityType entity)
{
var stringsToMatch = new Dictionary<string,string> { { "POLICY_NO", "IPolicyNumber" }, { "UNIQUE_ID", "IUniqueId" } };
return string.Format(
CultureInfo.InvariantCulture,
"{0} {1}partial class {2}{3}{4}",
Accessibility.ForType(entity),
_code.SpaceAfter(_code.AbstractOption(entity)),
_code.Escape(entity),
_code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)),
stringsToMatch.Any(o => entity.Properties.Any(n => n.Name == o.Key)) ? " : " + string.Join(", ", stringsToMatch.Join(entity.Properties, l => l.Key, r => r.Name, (l,r) => l.Value)) : string.Empty);
}
Dies ist ein spezieller Fall, aber es zeigt die Möglichkeit, .tt
Vorlagen ändern zu können.
XML-Dokumentation zu Entitätsklassen hinzufügen
In jeder generierten Modellklasse werden standardmäßig keine Dokumentationskommentare hinzugefügt. Wenn Sie XML-Dokumentationskommentare für alle generierten Entitätsklassen verwenden möchten, finden Sie diesen Teil in [modelname] .tt ( modelname ist der aktuelle EDMX-Dateiname):
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code); // used to write model namespace
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
Sie können die XML-Dokumentationskommentare vor der Zeile UsingDirectives
, wie im folgenden Beispiel gezeigt:
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code);
#>
/// <summary>
/// <#=entity.Name#> model entity class.
/// </summary>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
Der generierte Dokumentationskommentar sollte wie nachstehend angegeben den Namen der Entität enthalten.
/// <summary>
/// Example model entity class.
/// </summary>
public partial class Example
{
// model contents
}