Мне нужна помощь в добавлении в шаблон POCO.tt Entity Framework Атрибуты для поддержки сериализации WCF и, если это возможно, как добавить использование пространства имен для каждого объекта.
Спасибо.
Мне нужна помощь в добавлении в шаблон POCO.tt Entity Framework Атрибуты для поддержки сериализации WCF и, если это возможно, как добавить использование пространства имен для каждого объекта.
Спасибо.
Вам нужно открыть файл model1.tt
(или что-то, что он вызвал в вашем проекте), и добавить несколько вещей.
Найдите эти строки кода (строка 34, в моем случае):
// Emit Entity Types
foreach (EntityType entity in ItemCollection.GetItems<EntityType>().OrderBy(e => e.Name))
{
fileManager.StartNewFile(entity.Name + ".cs");
Прямо перед этой строкой:
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#>
вам нужно добавить атрибут [DataContract]
:
[DataContract]
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#>
в ваш шаблон.
Затем найдите эту строку кода:
<#=PropertyVirtualModifier(Accessibility.ForProperty(edmProperty))#> <#=code.Escape(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#>
Перед этой строкой добавьте атрибут [DataMember]
к вашему шаблону:
[DataMember]
<#=PropertyVirtualModifier(Accessibility.ForProperty(edmProperty))#> <#=code.Escape(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#>
Это добавит эти атрибуты для всех объектов и всех свойств - это может быть не то, что вы действительно хотите, но это начало.
Также: чтобы закончить, вы, вероятно, хотите посмотреть на функцию WriteHeader
в своем шаблоне T4 и добавить оператор using System.Runtime.Serialization;
в свой список использований:
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Runtime.Serialization; // add this to handle DataContract/DataMember
В EF6.1 вам нужно отредактировать файл model1.tt и добавить тег между UseDirectives и EntityClassOpening:
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
//MY TAG:
[Serializable]
<#=codeStringGenerator.EntityClassOpening(entity)#>