2010-09-09 14 views
14

में [डेटामेम्बर] [डेटाकंट्रैक्ट] विशेषताएँ जोड़ना मुझे पीओसीओ में जोड़ना कुछ मदद चाहिए। एटी इकाई फ्रेमवर्क टेम्पलेट डब्लूसीएफ सीरियलाइजेशन का समर्थन करने के लिए विशेषताओं और यदि यह संभव है कि प्रत्येक इकाई में नेमस्पेस उपयोग कैसे जोड़ें।एंटिटी फ्रेमवर्क पीओसीओ टेम्पलेट

धन्यवाद।

उत्तर

46

आपको अपनी 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)#> 

यह सभी संस्थाओं और सभी संपत्तियों के लिए उन विशेषताओं जोड़ देगा - हो सकता है कि आप वास्तव में क्या चाहते हैं, लेकिन यह एक शुरुआत है।

इसके अलावा:

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

धन्यवाद, वास्तव में मैं क्या जरूरत है, मुझे लगता है कि मैं मिनट से टी -4 मिनट समझते हैं, मैं सिर्फ अभी कुछ फिक्स त्वरित आवश्यकता शुरू हो सकता है। कृपया आप प्रत्येक इकाई पर नेमस्पेस का उपयोग करके कहां जोड़ सकते हैं पर कुछ सहायता प्रदान कर सकते हैं? –

+0

मुझे यह मिला है, धन्यवाद। –

+0

@gtas: मेरा उत्तर अपडेट किया गया - आपको डेटाकंट्रैक्ट/डेटामेम्बर विशेषताओं को संभालने के लिए अतिरिक्त नामस्थान 'System.Runtime.Serialization' को शामिल करने की आवश्यकता होगी –

1

EF6.1 में आप की जरूरत है: बंद समाप्त करने के लिए, तो आप शायद अपने टी -4 टेम्पलेट में WriteHeader समारोह पर एक नजर है, और usings की अपनी सूची में using System.Runtime.Serialization; बयान जोड़ना चाहते हैं model1.tt को संपादित करने और UsingDirectives और EntityClassOpening के बीच टैग को जोड़ने के लिए:

<#=codeStringGenerator.UsingDirectives(inHeader: false)#> 
//MY TAG: 
[Serializable] 
<#=codeStringGenerator.EntityClassOpening(entity)#> 
संबंधित मुद्दे