Entity Framework
.t4-mallar i enhetsramar
Sök…
Dynamiskt lägga till gränssnitt till modellen
När man arbetar med befintlig modell som är ganska stor och regenereras ganska ofta i fall där abstraktion behövs kan det vara kostsamt att manuellt gå runt omredekorera modell med gränssnitt. I sådana fall kanske man vill lägga till lite dynamiskt beteende till modellgenerering.
Följande exempel visar hur automatiskt läggs till gränssnitt på klasser som har specifika kolumnnamn:
Gå till .tt
filen i din modell modifiera metoden EntityClassOpening
på följande sätt, detta kommer att lägga till IPolicyNumber
gränssnittet på enheter som har POLICY_NO
kolumn, och IUniqueId
på 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);
}
Detta är ett specifikt fall men det visar att det är möjligt att ändra .tt
mallar.
Lägga till XML-dokumentation i entitetsklasser
På alla genererade modellklasser finns det inga dokumentationskommentarer som läggs till som standard. Om du vill använda XML-dokumentationskommentarer för alla genererade entitetsklasser hittar du denna del inuti [modellnamn] .tt ( modellnamn är aktuellt EDMX-filnamn):
foreach (var entity in typeMapper.GetItemsToGenerate<EntityType>(itemCollection))
{
fileManager.StartNewFile(entity.Name + ".cs");
BeginNamespace(code); // used to write model namespace
#>
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
Du kan lägga till XML-dokumentationskommentarerna innan du UsingDirectives
raden UsingDirectives
som visas i exemplet nedan:
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)#>
Den genererade dokumentationskommentaren ska innehålla enhetsnamn enligt nedan.
/// <summary>
/// Example model entity class.
/// </summary>
public partial class Example
{
// model contents
}