Entity Framework
.t4-sjablonen in entiteitskader
Zoeken…
Dynamisch toevoegen van interfaces aan model
Bij het werken met een bestaand model dat vrij groot is en heel vaak wordt geregenereerd in gevallen waar abstractie nodig was, kan het kostbaar zijn om het model met interfaces handmatig opnieuw in te richten. In dergelijke gevallen wilt u misschien wat dynamisch gedrag toevoegen aan het genereren van modellen.
In het volgende voorbeeld wordt getoond hoe automatisch interfaces worden toegevoegd aan klassen met specifieke kolomnamen:
In uw model gaat u naar .tt
bestand wijzigen van de EntityClassOpening
methode volgt, zal deze add IPolicyNumber
interface op entiteiten die hebben POLICY_NO
kolom en IUniqueId
op 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);
}
Dit is een specifiek geval, maar het toont de mogelijkheid om .tt
sjablonen te kunnen wijzigen.
XML-documentatie toevoegen aan entiteitsklassen
Op alle gegenereerde modelklassen zijn standaard geen documentatie-opmerkingen toegevoegd. Als u wilt XML-documentatie commentaar te gebruiken voor elke geproduceerde eenheid klassen, vinden dit deel binnen [modelnaam] Tt (modelnaam is actueel EDMX bestandsnaam):
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code); // used to write model namespace
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
U kunt de XML-documentatiereacties toevoegen vóór de regel van UsingDirectives
, zoals in het onderstaande voorbeeld:
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)#>
De gegenereerde documentatiecommentaar moet de entiteitsnaam bevatten zoals hieronder aangegeven.
/// <summary>
/// Example model entity class.
/// </summary>
public partial class Example
{
// model contents
}