2012-07-30 7 views
5

मैं की तरहइकाई की रूपरेखा नेविगेशन गुण पाशन मुद्दा हालांकि WCF

public class User 
{ 
    [Key] 
    public long UserId { get; set; } 

    [Required] 
    public String Nickname { get; set; } 

    public virtual ICollection<Group> Memberships { get; set; } 
} 

public class Group 
{ 
    [Key] 
    public long GroupId { get; set; } 

    [Required] 
    public String Name { get; set; } 

    public virtual ICollection<User> Members { get; set; } 
} 

public class DataContext : DbContext 
{ 
    public DbSet<User> Users { get; set; } 
    public DbSet<Group> Groups { get; set; } 

    public DataContext() 
    { 
     Configuration.LazyLoadingEnabled = true; 
    } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<User>() 
     .HasMany(u => u.Memberships) 
     .WithMany(t => t.Members) 
     .Map(x => 
     { 
      x.MapLeftKey("UserId"); 
      x.MapRightKey("GroupId"); 
      x.ToTable("GroupMembers"); 
     }); 
    } 
} 

सभी एक मॉडल है ठीक हो जाता है जब एक परीक्षण सांत्वना अनुप्रयोग का उपयोग गई चीजों का उपयोग, लेकिन मैं एक WCF सेवा के माध्यम से इस की जरूरत है, यहाँ मुझे मिल गया यह अपवाद:

सेवा का आह्वान करने में विफल। संभावित कारण: सेवा ऑफ़लाइन या पहुंच योग्य नहीं है; क्लाइंट-साइड कॉन्फ़िगरेशन प्रॉक्सी से मेल नहीं खाता है; मौजूदा प्रॉक्सी अमान्य है। के लिए अधिक जानकारी के लिए स्टैक ट्रेस देखें। आप एक नया प्रॉक्सी शुरू करने से ठीक करने के लिए कोशिश कर सकते हैं, बहाल करने को डिफ़ॉल्ट कॉन्फ़िगरेशन, या ताज़ा सेवा

एक ही रास्ता है कि मैं इस काम के है पाया है संस्थाओं में से एक में नाविक को दूर करने, होने क्योंकि दोनों तरफ नेविगेटर एक अनंत लूपिंग का कारण बनता है।

क्या यह नेविगेटर को हटाए बिना काम करने का कोई तरीका है?

+0

क्या आप बमबारी कर रहे सेवा पद्धति का कोड पोस्ट कर सकते हैं? साथ ही, क्या आप जो अपवाद प्राप्त कर रहे हैं उसका विवरण पोस्ट कर सकते हैं? – Joon

उत्तर

7

वहाँ दो मुद्दों आप WCF उपयोग करने का प्रयास करता है, तो कर रहे हैं:

  • सबसे पहले मुद्दा: क्या आप संबंधित संस्थाओं वापस जाने के लिए के रूप में अच्छी तरह से करना चाहते हैं? WCF/serialization के साथ काम करते समय हमेशा आलसी लोडिंग बंद करें और सुनिश्चित करें कि आप उन रिश्तों के लिए मैन्युअल रूप से उपयोग करें जिन्हें आप वास्तव में वापस करना चाहते हैं। अन्यथा आलसी लोडिंग ऑब्जेक्ट ग्राफ़ में सभी संबंध लोड करेगी। इसके अलावा इस तरीके के आधार पर कि आपकी सेवा संदर्भ के जीवन चक्र को कैसे प्रबंधित करती है, आलसी लोडिंग तब हो सकती है जब संदर्भ पहले से ही निपटाया जा सके।
  • आपको परिपत्र संदर्भ के बारे में धारावाहिक को अवश्य कहना चाहिए या परिपत्र संदर्भ को हटा देना चाहिए। डिफ़ॉल्ट रूप से डब्ल्यूसीएफ DataContractSerializer का उपयोग करता है। परिपत्र संदर्भ को हटाने के लिए आप IgnoreDataMember विशेषता वाले उन नेविगेशन गुणों में से एक को चिह्नित कर सकते हैं या आप DataContract(IsReference = true) विशेषता और सभी सदस्य गुणों के साथ सभी इकाइयों को चिह्नित करके सर्कुलर संदर्भ के बारे में सीरियलाइज़र को बता सकते हैं जिन्हें DataMember विशेषता के साथ क्रमबद्ध किया जाना चाहिए।
+0

क्या यह अभी भी ईएफ 6 में मान्य है? मैं देखता हूं कि आपका उत्तर अब थोड़ा सा दिनांक है। इसके अलावा, चूंकि मैं डीबी से स्वत: जेनरेटेड कक्षाओं का उपयोग कर रहा हूं और कोड फर्स्ट विधि नहीं, इसलिए डेटा मॉडल को ओवरराइट करने के साथ हमेशा यह समस्या होती है। हम इसका सामना कैसे करते हैं? (आंशिक वर्ग बहुत अच्छे हैं लेकिन जिम्मेदार मुद्दे को हल नहीं करते हैं।) –

+1

@ कोनराड विल्टरस्टेन: यदि आपकी कक्षाएं टी 4 टेम्पलेट द्वारा स्वत: उत्पन्न की गई हैं तो आप सीधे आवश्यक विशेषताओं का उत्पादन करने के लिए टेम्पलेट को संशोधित कर सकते हैं। इससे यह सुनिश्चित होगा कि मॉडल हर बार पुन: उत्पन्न होने पर गुण होंगे। –

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