2012-04-10 14 views
10

मेरे पास एक इकाई प्रकार है जिसे चित्र से प्राप्त किया गया है (प्रकाशन के 5 अन्य प्रकार हैं, सभी 10 आम गुण साझा करते हैं)।विरासत इकाई प्रकार की तालिका-विभाजन?

दुर्भाग्यवश, मेरे डीबी में छवि तालिका में विभिन्न प्रस्तावों पर छवि के 4 संस्करणों के डेटा के साथ 4 बाइनरी कॉलम शामिल हैं, इसलिए ईएफ छवि प्रकार के 4 गुण हैं: बिनऑरिगिनल, बिनहाइर, बिनलोरेस, बिन थंबनेल, जिसमें शामिल हैं बहुत बड़ी मात्रा में डेटा।

यह प्रदर्शन को प्रभावित कर रहा है। उदाहरण के लिए, जब मैं सिर्फ छवि लिंक की एक श्रृंखला उत्पन्न कर रहा हूं, तो मैं सभी बाइनरी डेटा को नहीं लेना चाहता हूं।

तो मैं मेज-बंटवारे की कोशिश की है, एक नया imagefile इकाई एक ला में 4 द्विआधारी क्षेत्रों रखने: http://blogs.msdn.com/b/adonet/archive/2008/12/05/table-splitting-mapping-multiple-entity-types-to-the-same-table.aspx

मैं सही टेबल मानचित्रण सुनिश्चित कर चुके हैं, 1-1 संघ जोड़ा गया है और शामिल निर्देशात्मक बाधा है, लेकिन मैं इस त्रुटि हो रही है:

Error 3033: Problem in mapping fragments starting at line 2731:EntitySets 
'ImageFiles' and 'Publications' are both mapped to table 'Images'. Their primary 
keys may collide. 

... यह वहाँ है कि तालिका विभाजित किया जा रहा है में एक समस्या एक विरासत रिश्ते में शामिल रहा है लगता है।

मैं प्रकाशन से नए imagefile एफई प्रकार इनहेरिट की कोशिश की है, लेकिन फिर मैं कोई त्रुटि मिलती है:

Problem in mapping fragments starting at lines 2332, 2374:Two entities with 
different keys are mapped to the same row 

प्रश्न वहाँ इस के आसपास किसी भी तरह से है, या तथ्य यह है कि मैं छवि की आवश्यकता है प्रकाशन से प्राप्त करने के लिए ईएफ प्रकार अन्य क्षेत्रों को एक नए प्रकार में विभाजित करने से रोकता है?

+1

क्या आप डेटाबेस स्कीमा बदल सकते हैं? अर्थात। छवियों के लिए एक अलग टेबल बनाओ? –

+0

हां: यही वह है जो मैंने अब "काम-आसपास" के रूप में किया है (यह वास्तव में एक बेहतर डीबी डिज़ाइन है, लेकिन यह बहुत अधिक काम था कि डीबी पहले से ही उत्पादन में है)। तालिका-विभाजन के बारे में मेरा सवाल अभी भी खड़ा है - यह अभी भी ईएफ का एक पहलू है जिसे मैं समझना चाहता हूं। यदि आप सत्यापित/दस्तावेज कर सकते हैं कि विरासत संबंध में उप-प्रकार वाली तालिका को विभाजित करना संभव नहीं है, तो मेरे लिए उत्तर स्वीकार करने के लिए पर्याप्त होगा। – Faust

+0

ठीक है, समझा, लेकिन मुझे यकीन नहीं है कि मैं उसमें डूबने जा रहा हूं :)। –

उत्तर

1

आप इसे एंटिटी फ्रेमवर्क की सीमा पर विचार कर सकते हैं: वास्तव में दो टुकड़े, अंतर्निहित डेटाबेस आइटम का मॉडल और मॉडल से निर्मित इकाई है। इकाई का उप-वर्ग मॉडल को प्रभावित नहीं करता है।

आप एक मॉडल पंक्ति के लिए डेटा के सभी लोड करने के लिए नहीं करना चाहते हैं, यह परियोजना:

var results = from product in myDB.Products 
       where product.Id == productId 
       select New 
       { 
        Id = product.Id, 
        Name = product.Name, 
        ImageUrl = product.ImageUrl 
       }; 

SQL क्वेरी कि इकाई की रूपरेखा केवल बनाता है के select खंड में स्तंभों का चयन करता है LINQ क्वेरी।

यह एंटिटी फ्रेमवर्क को तालिका पंक्ति को ObjectContext (या DBContext ईएफ 5) ऑब्जेक्ट में संग्रहीत करने से भी रोकता है।

एक साइड नोट के रूप में, मैं व्यक्तिगत रूप से नोएसक्यूएल समाधान में बड़े पैमाने पर बाइनरी डेटा स्टोर करने का प्रयास करता हूं, और केवल SQL डेटाबेस में संबंधित कुंजी को बनाए रखता हूं।

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