2010-09-09 19 views

risposta

46

È necessario aprire il file model1.tt (o qualsiasi altra cosa si chiami nel progetto) e aggiungere alcune cose.

Individuare queste righe di codice (linea 34, nel mio caso):

// Emit Entity Types 
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name)) 
{ 
    fileManager.StartNewFile(entity.Name + ".cs"); 

Poco prima di questa linea qui:

<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#> 

è necessario aggiungere l'attributo [DataContract]:

[DataContract] 
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#> 

al modello.

Avanti, individuare questa riga di codice:

<#=PropertyVirtualModifier(Accessibility.ForProperty(edmProperty))#> <#=code.Escape(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#> 

Prima di quella linea, aggiungere l'attributo [DataMember] al modello:

[DataMember] 
<#=PropertyVirtualModifier(Accessibility.ForProperty(edmProperty))#> <#=code.Escape(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#> 

Ciò aggiungere tali attributi per tutti gli enti e tutte le proprietà - potrebbe non essere quello che vuoi veramente, ma è un inizio.

anche: per finire, probabilmente vuole avere uno sguardo alla funzione di WriteHeader nel modello T4, e aggiungere l'istruzione using System.Runtime.Serialization; alla tua lista di usings:

using System.Collections.ObjectModel; 
using System.Collections.Specialized; 
using System.Runtime.Serialization; // add this to handle DataContract/DataMember 
+1

Grazie, esattamente quello che mi serve, penso che potrei iniziare a capire T4 minuto per minuto, ho solo bisogno di alcune correzioni veloce al momento. Si prega di fornire un aiuto su dove aggiungo utilizzando namespace su ciascuna entità? –

+0

L'ho trovato, grazie. –

+0

@gtas: aggiornata la mia risposta - è necessario includere lo spazio dei nomi aggiuntivo 'System.Runtime.Serialization' per gestire gli attributi DataContract/DataMember –

1

In EF6.1 è necessario per modificare il model1.tt e aggiungere tag tra UsingDirectives e EntityClassOpening:

<#=codeStringGenerator.UsingDirectives(inHeader: false)#> 
//MY TAG: 
[Serializable] 
<#=codeStringGenerator.EntityClassOpening(entity)#> 
Problemi correlati