2009-09-02 12 views
6

LINQ अब तक उल्लेखनीय रूप से सुरुचिपूर्ण रहा है, लेकिन मूल एम 2 एम प्रश्नों को करने के लिए यह कोई समाधान नहीं प्रदान करता है जिसे मैं देख सकता हूं।LINQ कई से कई रिश्तों: समाधान?

इससे भी बदतर यह है कि जब यह किसी अन्य टेबल रिलेशनशिप के लिए काम करता है, तो LINQ मुझे मेरी एम 2 एम तालिका के लिए कक्षा संरचना में एक संघ नहीं दे रहा है।

तो मैं जैसे

artwork.artists.where(...) 
//or 
artist.Artworks.add(artwork) 

कर सकते हैं, लेकिन मैं ऐसा नहीं कर सकते

artwork.artowrks_subjects.tagSubjects.where(...) 
//or 
tagSubject.artworks_subjects.add(artwork) 

alt text http://img299.imageshack.us/img299/257/20090902122107.png

वहाँ इस सीमा को सुलझाने के लिए एक आम पैटर्न है?

+0

किसी कारण से, एम 2 एम मेरे लिए गंदा लगता है ... इसे केवल वर्तनी पर विचार करें;) – TJB

उत्तर

3

स्वयं समाधान ढूंढ सकते हैं। काम करने के लिए स्वचालित संबंधों के लिए, दोनों तालिकाओं को प्राथमिक कुंजी (ओओएस) की आवश्यकता होती है। नोटिस artworks_subjects में पीके प्रतीक गुम है।

2

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

बेशक, यदि आप लिंक-टेबल में कॉलम जोड़ना चाहते हैं तो यह खट्टा हो जाता है; तो कुछ मायनों में मैं इसे "जैसा है" छोड़ने का लुत्फ उठाऊंगा।

where आदि के संबंध में - आपका क्या मतलब है? आप एसोसिएशन में शामिल हो सकते हैं, और आप Any आदि का उपयोग करने में सक्षम होना चाहिए; क्या आपके पास एक ठोस उदाहरण है जो आप करना चाहते हैं?

+0

मैंने जो कुछ दिखाया वह बिल्कुल काफी है। लक्ष्य कलाकृति वस्तु में एक टैग जोड़ना है। एकमात्र उचित जुड़ाव कई लोगों के लिए है। LINQ-to-SQL के साथ ऐसा करने का एकमात्र तरीका यह है कि एक लूप चलाने के लिए, artwork_subject ऑब्जेक्ट्स बनाना और उन्हें मैन्युअल रूप से बाध्य करना है। मुझे इतना अजीब लगता है कि यह है कि मैं कलाकृति और artwork_subjects तालिकाओं के बीच कई लोगों में शामिल होने के लिए भी एक नहीं कर सकता (जो टैगसब्जेक्ट्स और artwork_subjects पर लागू होता है)। –

-1

हां।

Subject -*----1- ArtworkSubjectParticipation -1----*- Artwork 
+2

क्या ऐसा नहीं है कि ओपी पहले से ही स्क्रीनशॉट में क्या मिला है? –

+1

आपका मतलब दो से एक से अधिक है, है ना? – Kobi

+0

यह मेरे पास है जो इसके विपरीत है। लेकिन शुद्ध परिणाम का अर्थ यह होगा कि केवल एक टैग एक कलाकृति से जुड़ा जा सकता है, जो लक्ष्य नहीं है। –

5

तरह से मैं M2M LINQ2SQL में काम मिल गया है: बिल्डर में

  1. खींचें टेबल, आप की तरह 'इसके बजाय कई-से-अनेक उपयोग दो कई-से-एक रिश्ते की सवाल में दिखा फिर से
  2. artworks_subject और artwor कश्मीर
  3. के बीच के रिश्ते को दूर एक नया आर बनाने elationship से artworks_subjectकलाकृति
  4. नए रिश्ते पर क्लिक करने के उसके गुण
  5. OneToOne करने के लिए परिवर्तन OneToMany से प्रमुखता (क्योंकि ManyToOne नहीं है मौजूद हैं)
  6. बाल खोल पाने के लिए संपत्ति अनुभाग और नाम फ़ील्ड को में बदलें, इसे एकवचन बनाएं ( आर्टवर्क के लिए आर्टवर्क)

अब tagSubject इकाई artwork_subjects का संग्रह होगा, और artwork_subject के प्रकार कलाकृतिकलाकृति नामक एक संपत्ति होगा। इसलिए अब आप LINQ अभिव्यक्ति जैसे

var x = dbcontext.tagSubjects.Single(s=>s.name=="Landscape"). 
    Artwork_Subjects. 
    Select(as=>as.Artwork.Name); 
संबंधित मुद्दे