我很乐意帮助您将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)#>
这将为所有实体和属性添加这些属性 - 这可能不是你真正想要的,但这是一个起点。
另外: 最后,您可能想查看T4模板中的WriteHeader
函数,并将using System.Runtime.Serialization;
语句添加到您的using列表中:
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Runtime.Serialization; // add this to handle DataContract/DataMember
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
//MY TAG:
[Serializable]
<#=codeStringGenerator.EntityClassOpening(entity)#>
[DataContract]
,在第72行上方添加[DataMember]
。同时,在代码块中添加using System.Runtime.Serialization;
。 - SamTech