2012-08-11 15 views
9

मैं एक विंडोज फोन ऐप कर रहा हूं जहां मेरे पास Azure में WebApi चल रहा है।पोर्टेबल क्लास लाइब्रेरी और ईएफ कोड-प्रथम के साथ कैसे काम करें?

मैं अपने "मॉडल" प्रोजेक्ट के लिए नई "पोर्टेबल क्लास लाइब्रेरी" (http://msdn.microsoft.com/en-us/library/gg597391.aspx) का उपयोग कर रहा हूं जो मेरे वेबएपी के बीच साझा कारण है प्रोजेक्ट (यह एक आदर्श एएसपी.नेट एमवीसी 4 प्रोजेक्ट है) और मेरा विंडोज फोन प्रोजेक्ट।

यह महान काम करता है और मॉडल (POCO) वर्ग क्रमांकित हैं और deserialized बस के रूप में मैं चाहता हूँ।

अब मैं अपने कुछ मॉडल/पीओसीओ ऑब्जेक्ट्स को स्टोर करना शुरू करना चाहता हूं और इसके लिए ईएफ कोड-प्रथम का उपयोग करना चाहता हूं, लेकिन यह एक समस्या है क्योंकि मैं अपनी पोर्टेबल क्लास लाइब्रेरी में एंटिटीफ्रेमवर्क असेंबली नहीं जोड़ सकता "प्रोजेक्ट, और वास्तव में मैं या तो पसंद नहीं करूंगा क्योंकि मुझे अपने मॉडल प्रोजेक्ट में केवल एक छोटे से हिस्से (विशेषताओं) की आवश्यकता है।

तो, कैसे एक दृष्टिकोण यह सबसे अच्छा तरीका है के लिए किसी भी सुझाव?

अद्यतन: खैर, यह है कि मैं वास्तव में इस परियोजना के लिए EntityFramework विधानसभा में जोड़ सकते हैं, लेकिन यह वास्तव में मुझे मदद नहीं करता है, गुणों के रूप में मैं System.ComponentModel.DataAnnotations जो नहीं कर सकते में जीवन उपयोग करने की आवश्यकता लगती है विंडोज फोन पर इस्तेमाल किया जाना चाहिए। अभी भी कोई सुझाव?

उत्तर

12

विशेषताएँ का उपयोग न करें। इसके बजाय धाराप्रवाह एपीआई का उपयोग करें और दृढ़ता (ईएफ) के लिए अलग असेंबली बनाएं जो आपके मॉडल असेंबली का संदर्भ देगा। दृढ़ता असेंबली का उपयोग आपके वेबएपीआई परत द्वारा किया जाएगा।

+0

धन्यवाद, यह नहीं पता था कि ईएफ के पास एक धाराप्रवाह एपीआई थी। ऐसा लगता है कि आप एक महान समाधान की तरह सुझाव देते हैं, मैं इसे आज़मा दूंगा। –

+0

पता है कि यह लंबे समय से पता है क्योंकि मैंने इस सवाल से पूछा था, लेकिन यह दृष्टिकोण मेरे लिए बहुत अच्छा काम कर रहा था - धन्यवाद :) –

+1

यह कैसे करना है पर स्पष्टीकरण? – sabbour

3

जब मैं एकाधिक प्लेटफ़ॉर्म पर मेरे डोमेन-परियोजना की जरूरत है, मैं आमतौर पर:

  1. डोमेन कोड
  2. एक मंच मैं एक मंच विशिष्ट वर्ग पुस्तकालय बनाने के लिए के लिए मानक नेट-वर्ग पुस्तकालय प्रोजेक्ट बनाएं
  3. मैं मानक नेट-वर्ग पुस्तकालय से फ़ाइलें जोड़ के रूप में लिंक (मौजूदा फ़ाइलें जोड़ें -> लिंक के रूप में) एक मंच विशिष्ट वर्ग पुस्तकालय के लिए और इसलिए वे अपने आप या तो लिंक की गई फ़ाइल या मूल फ़ाइल को संपादित अद्यतन कर रहे हैं ।
  4. जब मैं .NET-class लाइब्रेरी में एक नई फ़ाइल जोड़ता हूं, तो मैं इसे प्लेटफ़ॉर्म विशिष्ट श्रेणी पुस्तकालयों के लिंक के रूप में जोड़ता हूं।
  5. प्लेटफार्म विशिष्ट विशेषताओं (अर्थात टेबल और ForeignKey जो DataAnnotations-विधानसभा का एक हिस्सा है) पूर्व प्रोसेसर टैग का उपयोग बाहर कर दिया जाए जा सकता है।

    #if !SILVERLIGHT 
    [Table("MyEntityFrameworkTable")] 
    #endif 
    public class MyCrossPlatformClass 
    { 
        // Blah blah blah 
    } 
    

और केवल शामिल हैं: मैं एक वर्ग और लिंक की गई फ़ाइल के साथ एक सिल्वरलाइट-परियोजना के साथ एक नेट-वर्ग पुस्तकालय है कहते हैं कि चलो, तो मैं नेट-विशिष्ट विशेषताओं करके शामिल कर सकते हैं डेटा एन्नोटेशन-एनईटी-क्लास लाइब्रेरी में असेंबली।

मुझे पता है कि पोर्टेबल क्लास लाइब्रेरी का उपयोग करने से यह अधिक काम है, लेकिन आप ऊपर दिए गए उदाहरण में पीसीएल में विशेषताओं को ऑप्ट आउट नहीं कर सकते हैं, क्योंकि आपको केवल साझा असेंबली को संदर्भित करने की अनुमति है (जिसे फिर से डेटा एनाटेशन नहीं है) ।

7

मैं मिकेल हेम्पेल की तुलना में एक संशोधित दृष्टिकोण का उपयोग, पूर्व प्रसंस्करण निर्देशों का उपयोग करने की आवश्यकता के बिना।

  1. एक मानक बनाएँ।नेट वर्ग पुस्तकालय, यह मॉडल फोन
  2. एक आंशिक वर्ग आप

    public partial class Person 
    { 
        public int Id { get; set; } 
        public string Name { get; set; } 
    } 
    
  3. साझा करने के लिए गैर-पोर्टेबल कोड (DataAnnotations की तरह) के लिए क्या चाहते हैं का प्रतिनिधित्व बनाएँ, एक और आंशिक वर्ग बनाने और उपयोग मेटाडाटा

    [MetadataTypeAttribute(typeof(Person.Metadata))] 
    public partial class Person 
    { 
        internal sealed class Metadata 
        { 
         private Metadata() { } // Metadata classes shouldn't be instantiated 
    
         // Add metadata attributes to perform validation 
         [Required] 
         [StringLength(60)] 
         public string Name; 
        } 
    } 
    
  4. एक पोर्टेबल कक्षा लाइब्रेरी बनाएँ, और चरण 2 से वर्ग को जोड़ने के "लिंक के रूप में"

संबंधित मुद्दे