7

का उपयोग कर सरकारी C# MongoDB में एक द्विदिश रिश्ते के साथ एक वस्तु को बचाने मैं इस तरह दो वर्ग है:ड्राइवर

public Class Company 
{ 
    public IList<Employee> Employees; 
} 

public Class Employee 
{ 
    public Company WorkPlace; 
} 

जब मैं कक्षा कंपनी का एक उद्देश्य सहेजना चाहते:

MongoDatabase Database = MongoServer.GetDatabase("db"); 

var workPlace = new Company(); 

var employee = new Employee { WorkPalce = workPlace}  
workPlace.Employees = new List<Employee>{ employee }; 

Database.GetCollection<Company>("company").Save(workPlace); 

Stackoverflow अपवाद फेंक दिया जाएगा।

उत्तर

6

ऐसा इसलिए हो रहा है क्योंकि आपके पास कक्षाओं द्वारा एक दूसरे के संदर्भ में एक चक्र बनाया गया है, स्पष्ट रूप से चालक इसे संभालने के लिए सुसज्जित नहीं है और मुझे विश्वास नहीं है कि यह चाहिए।

आपको यह तय करने की आवश्यकता है कि आप डेटाबेस में इस डेटा को कैसे मॉडल करना चाहते हैं।
यदि आपके पास दो संग्रह हैं, कंपनियों में से एक और कर्मचारियों में से एक, तो डेटा स्तर पर आपको केवल संदर्भों के लिए आईडी शामिल होना चाहिए।

यदि आपके पास केवल कंपनियों का एक संग्रह है, तो आपको किसी ऑब्जेक्ट संदर्भ के बजाय आईडी के साथ कंपनी को वापस संदर्भित करने के लिए कर्मचारी वर्ग को बदलने की आवश्यकता है।

यह केवल डेटाबेस में होने की आवश्यकता है, हालांकि, आप अपने सी # कोड में स्वचालित रूप से ऑब्जेक्ट संदर्भ या आलसी लोड इत्यादि को जोड़ने के लिए अपना मॉडल बढ़ा सकते हैं (सही एन + 1 मुद्दों से बचने के लिए) जो सही है स्थिति के लिए।

+0

प्रोत्साहन-ओपनसोर्स/अगर मैं बजाय एक आईडी के साथ कंपनी को वापस संदर्भित करने के लिए कर्मचारी वर्ग बदलने के लिए:

https://github.com/impetus-opensource/Kundera [email protected] पर Kundera-उदाहरण पर एक नज़र एक ऑब्जेक्ट संदर्भ, इसलिए जब मेरे पास कर्मचारी की एक सूची है और सूची को पुन: सक्रिय करें और प्रत्येक कर्मचारी की कंपनी का उपयोग करना चाहते हैं, तो प्रत्येक के लिए एक क्वेरी उत्पन्न की जाएगी। यह धीमा हो जाएगा, मत बनो? –

+1

@ ओमिडआरएच: हां, यह आम तौर पर तुलनात्मक रूप से धीमा होगा। कम करने के लिए कई रणनीतियां हैं, लेकिन यह इस बात पर निर्भर करती है कि आप वास्तव में क्या हासिल करना चाहते हैं। उदाहरण के लिए, यदि आपको प्रत्येक कर्मचारी के लिए कंपनी का नाम प्रदर्शित करने की आवश्यकता है, तो आप कंपनी के नाम को कर्मचारी को कॉपी करना चाहेंगे। कर्मचारियों और उनकी कंपनी के नामों की एक सूची प्रदर्शित करना तब आसान है, लेकिन जब कंपनी का नाम बदलता है, तो आपको सभी कर्मचारियों को अपडेट करना होगा। इसे डी-सामान्यीकरण कहा जाता है। NoSql में, डेटा संरचना को आकार देने के लिए आपको आवश्यक प्रश्नों को, डेटा को स्टोर करने के लिए आवश्यक नहीं है। – mnemosyn

0

मेरा सुझाव है, कुंडरा आज़माएं। यह मोंगो के लिए इस तरह के मामले को संभालने में सक्षम होना चाहिए। -Examples.git Kundera

+0

क्या यह जावा पुस्तकालय नहीं है? –

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