2009-06-18 19 views
7

एक फॉर्म पोस्ट के परिणामस्वरूप, मैं एक नया ब्रांड रिकॉर्ड सहेजने की कोशिश कर रहा हूं।इकाई फ्रेमवर्क EntityKey/विदेशी कुंजी समस्या

gID = CInt(Request.Form("Gender")) 
Brand.GenderReference.EntityKey = New EntityKey("DB_ENTITIES.Gender", "Id", gID) 
TryUpdateModel(Brand) 
DB.SaveChanges() 

कौन सा निम्न त्रुटि में परिणाम है: मेरी नजर में, लिंग एक लटकती, एक पूर्णांक है, जो ViewData से पॉप्युलेट होता है ("लिंग") लौटने

मैं से सेट किया हुआ मेरा लिंक इस प्रकार है।

Entities in 'DB_ENTITIES.Brand' participate in the 'FK_Brand_Gender' relationship. 0 related 'Gender' were found. 1 'Gender' is expected. 

क्या कोई मुझे सादे अंग्रेजी में पैरामीटर समझा सकता है। मैंने पहले पैरामीटर के रूप में डीबी लिंग को भी कोशिश की लेकिन कोई खुशी नहीं।

उत्तर

18

बल्कि (सी # में बहुत माफी मैं एक वीबी पुरुष नहीं कर रहा हूँ) एक EntityKey एक ठूंठ लिंग वस्तु बनाने बनाने की तुलना में DB पर संपत्ति के नाम है कि आप लिंग संस्थाओं मिल स्ट्रिंग नीचे है से):

DB.AttachTo("Genders",g); 

यह राज्य है जहां में डेटाबेस डालता है डेटाबेस डेटाबेस क्वेरी के बिना अपरिवर्तित स्थिति में ObjectContext में है। अब आप सामान्य

brand.Gender = g; 
DB.AddToBrand(brand); 
DB.SaveChanges(); 

के अनुसार एक रिश्ता बना सकते हैं, यह सब कुछ है। साथ EntityKeys

आशा के आसपास गंदगी के लिए कोई ज़रूरत नहीं इस में मदद करता है

Alex

+0

प्रतिक्रिया एलेक्स के लिए धन्यवाद - यह अब प्राप्त हो रहा है: ऑब्जेक्टस्टेट प्रबंधक में एक ही कुंजी वाला एक ऑब्जेक्ट पहले से मौजूद है। ऑब्जेक्टस्टेट प्रबंधक एक ही कुंजी के साथ एकाधिक ऑब्जेक्ट्स को ट्रैक नहीं कर सकता है। – Paul

+0

पॉल, आपने 'एक ही कुंजी के साथ कई ऑब्जेक्ट्स' समस्या को कैसे हल किया? मैं वही मिल रहा हूँ। – Picflight

+2

संदर्भ में कुछ जोड़ने से पहले आपको ऑब्जेक्टस्टेट मैनेजर को LINQ से ऑब्जेक्ट्स का उपयोग करके जांचना चाहिए कि यह ऑब्जेक्ट पहले से मौजूद नहीं है। –

1

आपको ब्रांड और लिंग दोनों का एक उदाहरण है और फिर लिंग के उदाहरण के लिए ब्रांड। लिंग सेट करें। फिर आप बिना किसी समस्या के बचा सकते हैं।

+0

यह है कि मेरी DB करने के लिए एक राउंड ट्रिप शामिल नहीं? निश्चित रूप से व्यू एक आईडी वापस पोस्ट कर रहा है जिसे बांध लिया जा सकता है। – Paul

+0

यह निर्भर करता है, यदि वस्तुएं संदर्भ में पहले से ही हैं, तो उसे डीबी की यात्रा की आवश्यकता नहीं है। एलेक्स जेम्स कोड का उपयोग करने के लिए अच्छा है (जैसा कि मैंने लिखा है उतना ही करता है)। –

0

ठीक है, मैं अद्यतन मॉडल का उपयोग करने के बजाय क्या आया है ठीक है। यह पोस्ट में संभावित रूप से अतिरिक्त फ़ील्ड जोड़े जाने के साथ ही समस्याग्रस्त/संभावित रूप से एक सुरक्षा जोखिम प्रतीत होता है। TrygetObjectByKey के माध्यम से लिंग का एक नया उदाहरण तत्काल किया जा सकता है। यह अब तक काम कर रहा है। लिंग संपत्ति ऑब्जेक्ट को अपडेट करने के लिए UpdateModel प्राप्त करने पर कोई अन्य सुझाव सराहना की।

Gender g = new Gender{ID = Int32.Parse(Request.Form("Gender"))}; 

तो फिर तुम (उचित EntitySet को लिंग देते हैं:

Dim cID As Integer 
cID = CInt(Request.Form("Gender")) 
Dim key As New EntityKey(DB.DefaultContainerName() & ".Gender", "ID", cID) 

Dim objGenderDS As New Gender 
'Bring back the Gender object. 
If DB.TryGetObjectByKey(key, objGenderDS) Then 
Brand.GenderReference.EntityKey = key 
Brand.Gender = objGenderDS 
DB.AddToBrand(Brand) 
DB.SaveChanges() 
Else 
End If 
संबंधित मुद्दे