我想帮助添加一个POCO .tt实体框架模板属性以支持WCF序列化,以及是否可能如何将命名空间使用添加到每个实体。
谢谢。
答案 0 :(得分:47)
您需要打开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 System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Runtime.Serialization; // add this to handle DataContract/DataMember
答案 1 :(得分:1)
在EF6.1中,你需要编辑model1.tt并在UsingDirectives和EntityClassOpening之间添加标签:
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
//MY TAG:
[Serializable]
<#=codeStringGenerator.EntityClassOpening(entity)#>