2010-01-24 6 views
5

मैं एंटिटी फ्रेमवर्क में नया हूं और चीजों को समझने की कोशिश कर रहा हूं। मेरे पास एक डेटाबेस बनाया गया है जो बहुत जटिल नहीं है। उनमें से लगभग 7 टेबल और 3 उनमें से एक टेबल रिकॉर्ड w/अन्य को जोड़ने के लिए मैपिंग टेबल हैं।एंटिटी फ्रेमवर्क का उपयोग करके, मैं कई रिश्तेदारों को कितने प्रतिबिंबित करता हूं और ऐसी नई इकाइयों को जोड़ता हूं जो एक नई इकाई के लिए मौजूद हैं?

  • टेबल उपयोगकर्ता

    • UserId
    • उपयोगकर्ता नाम
  • टेबल भूमिका

    • भूमिका-आईडी
    • : उदाहरण मैं यहाँ का उपयोग कर रहा है यह 10
    • RoleName
  • तालिका: UserRole

    • UserId
    • भूमिका-आईडी

विदेशी कुंजी मेरी डेटाबेस में मैप किया जाता है। जब मैं वीएस 2008 के अंदर एक नया इकाई मॉडल बनाता हूं, तो चित्र में रिश्ते सही होते हैं, लेकिन UserRole तालिका के लिए कोई टेबल नहीं बनाते हैं। रिश्ते को उपयोगकर्ता & भूमिका के बीच कई लोगों के रूप में मैप किया गया है।

मेरी समस्या यह है कि मैं नए उपयोगकर्ता बना सकता हूं और मैं नई भूमिकाएं बना सकता हूं, लेकिन मैं यह नहीं समझ सकता कि मौजूदा भूमिका के साथ एक नया उपयोगकर्ता कैसे बनाया जाए। इसके अलावा, उपयोगकर्ता के साथ शुरू करने के लिए UserRole तालिका शायद सही ढंग से मैप नहीं किया गया है। यहाँ मेरी कोड अब तक बताया गया है:

ObjectQuery<Role> roles = context.Roles; 
Role role = context.Roles.Where(c => c.RoleName == "Subscriber").First(); 

User user = new User 
{ 
    DisplayName = "TestCreate2", 
    Email = "[email protected]", 
    Password = "test" 
};    
context.AttachTo("Roles", role); 
user.Roles.Add(role);    
context.AddToUsers(user); 
context.SaveChanges(); 

यहाँ त्रुटि मैं हो रही है:

क्योंकि यह एक DefiningQuery है और कोई तत्व तत्व वर्तमान समर्थन करने के लिए में मौजूद है EntitySet 'UserRoles' अपडेट करने में असमर्थ ऑपरेशन।

<EntitySet Name="UserRoles" EntityType="RememberTheJourneyModel.Store.UserRoles" store:Type="Tables" store:Schema="dbo" store:Name="UserRoles"> 
     <DefiningQuery>SELECT 
    [UserRoles].[Role_id] AS [Role_id], 
    [UserRoles].[User_id] AS [User_id] 
    FROM [dbo].[UserRoles] AS [UserRoles]</DefiningQuery> 
     </EntitySet> 

यह दांत खींच रहा था बस यह पता लगाने की कैसे संदर्भ ऐसी है कि वह मुझे एक वास्तविक भूमिका इकाई दिया क्वेरी करने के लिए:

यहाँ एक्सएमएल कि UserRole मेज पर संबंधित है। मुझे यकीन है कि यह समस्या कुछ है जो UserRole मैप किया गया है, लेकिन मैं बस यहां शुरू कर रहा हूं और मुझे कोई विचार नहीं है कि यह गलत हो सकता है।

और मैंने वास्तव में इस साइट को Google & खोजा है, लेकिन मुझे लगता है कि मैं एक प्रश्न खोजने के लिए सही खोज पैरामीटर के साथ नहीं आया हूं जो इसे ठीक करने में मेरी सहायता करता है। मुझे एक सवाल मिला जिसमें कहा गया है कि ईएफ के पास इसके साथ समस्याएं हैं, लेकिन यदि आप मैपिंग टेबल कर रहे हैं तो दोनों कॉलम प्राथमिक कुंजी बनाते हैं, यह स्वयं काम करता है। मुझे यकीन नहीं है कि यह कैसे करें। क्या यह डेटाबेस में किया गया है (एसक्यूएल सर्वर 2005 एक्सप्रेस का उपयोग कर) या मैपिंग में? यह एक निजी परियोजना है इसलिए यदि आवश्यक हो तो मैं कोड या एक्सएमएल के बारे में अधिक जानकारी पोस्ट कर सकता हूं। किसी भी और सभी मदद की सराहना की जाएगी।

उत्तर

4

मुझे याद है कि इस मुद्दे में भी पहले से चल रहा है ... और मेरा मानना ​​है कि मैंने इसे अपनी एसोसिएशन टेबल में कॉलम कुंजी दोनों बनाकर तय किया है।

आप दोनों कॉलम SQL सर्वर प्रबंधन स्टूडियो तालिका डिज़ाइनर में प्राथमिक कुंजी बना सकते हैं। बस एक ही समय में User_Id और Role_Id दोनों को हाइलाइट करें, बाएं दाएं क्लिक करें और प्राथमिक कुंजी का चयन करें ... इससे ऐसा हो जाएगा कि कोई रिकॉर्ड उपयोगकर्ता_आईडी और Role_Id का समान संयोजन नहीं हो सकता .. प्रत्येक प्रविष्टि को अद्वितीय बनाते हैं।

फिर आप एंटिटी फ्रेमवर्क डिजाइनर में अपना डेटा मॉडल अपडेट कर सकते हैं .. और उम्मीद है कि जाने के लिए अच्छा होगा।

मेरा मानना ​​है कि अगर किसी तालिका में रिकॉर्ड्स अद्वितीय होने के लिए परिभाषित कोई कुंजी नहीं है, तो ईएफ रिकॉर्ड्स को सही तरीके से अपडेट करने में सक्षम नहीं होगा, और इसलिए उस मामले के खिलाफ फ्रेमवर्क गार्ड।

+2

वह था! मुझे अभी नहीं पता था कि 2 प्राथमिक कुंजी कैसे असाइन करें। दोनों पंक्तियों को हाइलाइट करना काम किया। धन्यवाद! – jason

+0

कोई समस्या नहीं - खुशी है कि मैं मदद कर सकता हूं। – markt

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

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