2012-06-28 9 views
5

मेरे पास एक इकाई कंपनी है जिसमें कई ऑर्डर हैं। मैं एक दूसरे के लिए निम्नलिखित के रूप में इन मैप किया गया:NHibernate धाराप्रवाह HasMany मैपिंग आवेषण NULL विदेशी कुंजी

कंपनी

HasMany(x => x.Orders).KeyColumn("CompanyID").Cascade.All().Inverse(); 

आदेश

References(x => x.Company).Column("CompanyID") 

हालांकि जब मैं कंपनी के लिए नया आदेश बनाने के लिए और इसे बचाने की कोशिश, मैं एक एसक्यूएल त्रुटि मिलती है : "मूल्य 'एनएलएलएल' कॉलम 'कंपनीआईडी', टेबल 'ऑर्डर' में नहीं डाल सकता; कॉलम नल की अनुमति नहीं देता है। INSERT विफल रहता है।"

(यह उत्पन्न SQL विवरण: INSERT INTO आदेश (नाम, CompanyID) मूल्यों (,); का चयन करें SCOPE_IDENTITY()]]?)

कौन सा एक तार्किक त्रुटि है, क्योंकि वास्तव में मैं CompanyID सेट होने के लिए नामुमकिन नहीं

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

मैंने भी एनएचबीर्नेट को हास्य करने के लिए तालिका में कॉलम को शून्य बना दिया। लेकिन उसने मुझे अनाथ आदेश के साथ छोड़ दिया क्योंकि ने आदेश रिकॉर्ड बनाया लेकिन कंपनी आईडी को छोड़ दिया।

यह मेरा testcode जहां मैं नया आदेश दिया है:

Company test = RepositoryBase<Company>.GetById(1); 
test.Orders.Add(new Order("test")); 
RepositoryBase<Company>.SaveWithTransaction(test); 

अपडेट माध्यम से सब ठीक हो गया।

वैसे भी, मुझे उम्मीद है कि कोई यहां देखता है कि मैंने मैपिंग में क्या गलत किया है।

अग्रिम धन्यवाद।

उत्तर

4

आप

test.Orders.Add(new Order("test") { Company = test }); 

उलटा ही राष्ट्रीय राजमार्ग बताता है कि आदेश आदेश वस्तु पर कंपनी के संदर्भ का उपयोग करता क्रमांक सम्मिलित करने के लिए पर कंपनी स्थापित करने के लिए भूल गया था।

2

इसे पहले जोड़ें !!!

test.Orders.Add(new Order("test"){Company = test}); 
+1

.. डब्ल्यू। एच। y। ? .. – Tushar

+0

@ तुषार मुझे नहीं पता! याद मत करो –

+0

ओ_ओ। यही कारण है कि आपको जवाब में कोड समझा जाना चाहिए। :) – Tushar