2010-09-09 11 views

Respuesta

46

Debe abrir su archivo model1.tt (o lo que se llame en su proyecto) y agregar algunas cosas.

Localizar estas líneas de código (línea 34, en mi caso):

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

Justo antes de esta línea aquí:

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

necesita añadir el atributo [DataContract]:

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

a su plantilla.

A continuación, localice esta línea de código:

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

Antes de esa línea, añadir el atributo [DataMember] a su plantilla:

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

Esto agregará esos atributos para todas las entidades y todas las propiedades - eso podría no ser lo que realmente quieres, pero es un comienzo.

también: para terminar, es probable que desee echar un vistazo a la función WriteHeader en su plantilla de T4, y añadir la declaración using System.Runtime.Serialization; a su lista de usings:

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

Gracias, exactamente lo que necesito, creo que podría empezar a entender T4 minuto a minuto, i sólo tiene algunas correcciones rápida en este momento. Por favor, ¿me pueden ayudar en dónde agrego usando espacios de nombres en cada entidad? –

+0

Lo he encontrado, gracias. –

+0

@gtas: actualicé mi respuesta: deberá incluir el espacio de nombres adicional 'System.Runtime.Serialization' para manejar los atributos DataContract/DataMember –

1

En EF6.1 que necesita para editar el model1.tt y añadir la etiqueta entre UsingDirectives y EntityClassOpening:

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