我希望在POCO中添加一些幫助.tt實體框架模板支持WCF序列化的屬性,以及是否可能如何將名稱空間使用添加到每個實體。在實體框架POCO模板中添加[DataMember] [DataContract]屬性
謝謝。
我希望在POCO中添加一些幫助.tt實體框架模板支持WCF序列化的屬性,以及是否可能如何將名稱空間使用添加到每個實體。在實體框架POCO模板中添加[DataMember] [DataContract]屬性
謝謝。
你需要打開你的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;
語句將usings的列表:
using System.Collections.ObjectModel;
using System.Collections.Specialized;
using System.Runtime.Serialization; // add this to handle DataContract/DataMember
在EF6.1你需要編輯model1.tt和UsingDirectives和EntityClassOpening之間添加標籤:
<#=codeStringGenerator.UsingDirectives(inHeader: false)#>
//MY TAG:
[Serializable]
<#=codeStringGenerator.EntityClassOpening(entity)#>
謝謝,正是我需要的,我想我可能會開始明白一分T4分鐘,我只是需要一些修復快速的現在。請你可以提供一些幫助,我在哪裏添加使用名稱空間在每個實體? – 2010-09-09 15:59:16
我找到了,謝謝。 – 2010-09-09 16:04:04
@gtas:更新了我的答案 - 您需要包含額外的命名空間'System.Runtime.Serialization'來處理DataContract/DataMember屬性 – 2010-09-09 16:06:57