2011-11-23 5 views
7

हम मौजूदा दुकान के साथ हमारी दुकान पर काम कर रहे इकाई ढांचे को प्राप्त करने की कोशिश कर रहे हैं (और इसलिए, डेटाबेस स्कीमा बदलना एक विकल्प नहीं है), और चीजों का परीक्षण करने के लिए बनाए गए यूनिट परीक्षण कुछ वास्तव में अजीब व्यवहार दिखा रहे हैं। ,इकाई फ्रेमवर्क: जहां यह कॉलम इन कॉलम को प्राप्त कर रहा है?

SELECT 
[Extent1].[CommentTypeId] AS [CommentTypeId], 
[Extent1].[DataPartId] AS [DataPartId], 
[Extent1].[CommentId] AS [CommentId], 
[Extent1].[CreatedTime] AS [CreatedTime], 
[Extent1].[Message] AS [Message], 
[Extent1].[From] AS [From], 
[Extent1].[Likes] AS [Likes], 
[Extent1].[SourceTypeId] AS [SourceTypeId], 
[Extent1].[StatusMessage_DataPartId] AS [StatusMessage_DataPartId], 
[Extent1].[Album_DataPartId] AS [Album_DataPartId] 
FROM [dbo].[Comments] AS [Extent1] 

अंतिम दो कॉलम का अनुरोध किया के रूप में आप देख सकते हैं, दूसरों की तरह नहीं हैं:

यह एसक्यूएल क्या वह किसी विशेष वस्तु है, के लिए बाहर थूक है। ऐसा इसलिए है क्योंकि वे वास्तव में मौजूद नहीं हैं, और हमें नहीं पता कि संस्था उनसे अनुरोध क्यों कर रही है! न तो हमारी विन्यास फाइलें और न ही हमारे पीओसीओ उनमें से कोई उल्लेख करते हैं। वास्तव में, जहां तक ​​हमारा डेटाबेस जाता है, वे पूरी तरह अलग अवधारणाएं हैं और सीधे बिल्कुल संबंधित नहीं हैं।

यह कॉलम कहां से प्राप्त हो रहा है, और मैं इसे कैसे कटौती करने के लिए कहूं?

संपादित करें: नीचे दिए गए कुछ प्रश्नों का उत्तर देने के लिए, 1) हम इकाई फ्रेमवर्क 4.2 का उपयोग कर रहे हैं। हम धाराप्रवाह मैपिंग का उपयोग कर रहे हैं।

2) POCO ही इस तरह दिखता है, समानता गड़बड़ संक्षिप्तता की खातिर बाहर काट के साथ:

public long DataPartId { get; set; } 
public string CommentId { get; set; } 
public DateTime? CreatedTime { get; set; } 
public string Message { get; set; } 
public string From { get; set; } 
public int? Likes { get; set; } 
public string SourceTypeId { get; set; } 
public int CommentTypeId { get; set; } 

public virtual DataPart DataPart { get; set; } 
public virtual CommentType CommentType { get; set; } 

3) हम edmx उपयोग नहीं कर रहे। हमारे पास एक कस्टम डीबीकॉन्टेक्स्ट है। ऐसी कई रेखाएं नहीं हैं जो बहुत दिलचस्प हैं। ये दोनों शायद ब्याज की हैं:

Configuration.LazyLoadingEnabled = true; 
    Configuration.ProxyCreationEnabled = true; 

इसके अलावा, प्रसंग फ़ाइल

modelBuilder.Configurations.Add(new WhateverConfiguration()) 

और

public IDbSet<WhateverPoco> PocoDatabaseTableAccessor { get; set; } 

4) का एक बहुत हम साथ db-पहली बार शुरू किया है, लेकिन उस काम नहीं किया, इसलिए हम वर्तमान में कोड-पहले कर रहे हैं।

5) यह है कि विशिष्ट POCO के लिए config की हिम्मत है:

HasRequired (x => x.DataPart) 
     .WithRequiredDependent (x => x.Comment); 

    HasRequired (x => x.CommentType) 
     .WithMany (x => x.Comments) 
     .HasForeignKey (x => x.CommentTypeId); 

    HasKey (x => x.DataPartId); 
    ToTable ("Comments", "dbo"); 
+4

आप इकाई ढांचे का उपयोग कैसे कर रहे हैं? क्या आप धाराप्रवाह मैपिंग का उपयोग कर रहे हैं, या एडीएमएक्स फ़ाइल का उपयोग कर रहे हैं? क्या आप डिजाइनर में निर्मित रिवर्स एनर्जिंग का उपयोग कर रहे हैं? इकाई ढांचे का क्या संस्करण? क्या आप अपने डेटा मॉडल के प्रासंगिक हिस्सों का एक स्क्रीनशॉट पोस्ट कर सकते हैं? –

+0

मॉडल, पीओसीओ कक्षाएं या कस्टम डीबीकॉन्टेक्स्ट दिखाएं। –

+2

ऐसा लगता है कि वे कोड-पहले उत्पन्न विदेशी कुंजी फ़ील्ड हो सकते हैं। – jrummell

उत्तर

4

समस्या आपके द्वारा दिखाए गए मानचित्रण या कक्षा में नहीं है। अपने Album और StatusMessage कक्षाएं देखें। क्या वे संस्थाएं हैं? क्या वे मैप किए गए हैं? क्या उनके पास टिप्पणियों के लिए संग्रह नेविगेशन गुण हैं? यदि हां ईएफ उम्मीद करता है कि Comment में इन तालिकाओं में एफके होना चाहिए। यदि तालिका में ऐसा कॉलम नहीं है, तो आपके पास उन इकाइयों में मैप किए गए इन नेविगेशन गुण नहीं हो सकते हैं।

Btw

। के बजाय Comments तालिका में आईडी CommentId नहीं होनी चाहिए?

+0

नहीं टिप्पणी Id किसी और के सेटअप के लिए एक अद्वितीय पहचानकर्ता है। DataPartId हमारी स्वयं की स्कीमा के लिए अद्वितीय पहचानकर्ता है, यह एक केंद्रीकृत तालिका से जुड़ा हुआ है जो हमें इन चीजों को एक समान प्रारूप में जोड़ने की अनुमति देता है - यह महत्वपूर्ण है क्योंकि हमारे द्वारा उत्पादित उत्पाद के प्रमुख कार्यों में से एक डेटा एकत्रीकरण और विश्लेषण है । – tmesser

+0

इसके अलावा, bullseye: किसी ने मेरे ज्ञान के बिना StatusMessage और एल्बम पर नेविगेशन गुणों में जोड़ा। मैंने इन्हें हटा दिया है और यूनिट परीक्षण अब अलग-अलग त्रुटियां दिखा रहे हैं। मदद की सराहना करते हैं, +1 और स्वीकार किए जाते हैं। – tmesser

+1

यह एक अजीब त्रुटि है, बस इसी तरह के परीक्षा के माध्यम से चला गया। जब आप नेविगेशन गुणों को हटाते हैं, तो हमेशा सुनिश्चित करें कि आप उन्हें संबंधित तालिकाओं से भी हटा दें। – Eugene

0

एक एक्सएमएल संपादक में .edmx और इन स्तंभों के लिए खोज खोलें। वे आपके मॉडल में कहीं कहीं होना चाहिए।

संपादित करें: आपके मूल प्रश्न में यह उल्लेख नहीं किया गया है कि आप पहले कोड का उपयोग कर रहे हैं। मुझे आश्चर्य है कि डेटाबेस में पहली बार आपकी परेशानी क्या थी, जो आमतौर पर अच्छी तरह से काम करती है। पहले कोड या मॉडल के साथ, आप मॉडल बनाने के बाद सामान्य रूप से डेटाबेस बनाते हैं (जेनरेट की गई SQL स्क्रिप्ट का उपयोग करके)।

आपने पिछले दो गुणों को वर्चुअल के रूप में घोषित किया है, यही कारण है कि उत्पन्न SQL अलग दिखता है। कोड से आप हमें दिखा रहे हैं कि हम नहीं देख सकते कि एल्बम का संदर्भ कहां से आता है।

क्योंकि आपके पास डेटाबेस है, इसलिए मैं एक परियोजना में मॉडल से .edmx उत्पन्न करूंगा। फिर आप इकाइयों को उत्पन्न करने और उन्हें एक अलग परियोजना में स्टोर करने के लिए एक पॉको कोड जनरेटर या एक स्व-ट्रैकिंग इकाई जेनरेटर का उपयोग कर सकते हैं। या आप उन्हें मैन्युअल रूप से लिख सकते हैं जैसा आपके पास पहले से है। संपत्ति के नाम डेटाबेस में कॉलम के साथ मेल खाना चाहिए।

+0

कृपया किसी समस्या को ठीक करने के प्राथमिक तरीके के रूप में प्रक्रिया परिवर्तनों का सुझाव न दें। यह सहायक नहीं है। मैं वास्तव में नहीं जा सकता कि दुकान सुरक्षा मानकों के कारण इस मामले में यह अनुपयोगी क्यों है, लेकिन आगे बढ़ने के लिए कृपया इन समाधानों को दूसरे, तीसरे, या अंतिम उपाय के रूप में देखें। – tmesser

+1

क्षमा करें, मैंने अभी मदद करने की कोशिश की है। और मेरा पहला अनुमान बुरा नहीं था क्योंकि मुझे नहीं पता था कि आपने इकाई ढांचे का उपयोग कैसे किया था। आपकी इकाई में एक साधारण पाठ खोज शायद मददगार होगी। मुझे आशा है कि मेरी और स्पष्टीकरण भविष्य में आपकी मदद करेगी। मुझे नहीं पता था कि आप इस परियोजना में कितने दूर हैं। क्या मेरा जवाब वास्तव में इतना बुरा था कि मुझे एक कम वोट मिलता है? कम से कम मैंने अपनी पूरी कोशिश की। – slfan

1

एमवीसी की तरह इकाई फ्रेमवर्क कॉन्फ़िगरेशन पर बहुत से सम्मेलन का उपयोग करता है। इसका मतलब है कि यह कुछ चीजें मानता है जबतक कि आप इसे नहीं बताते।

हालांकि, आपके द्वारा प्रदान की गई जानकारी के आधार पर यहां कुछ वास्तव में अजीब बात है। एसक्यूएल क्वेरी के मुताबिक, यह टिप्पणियाँ तालिका से आ रहा है, हालांकि आपका धाराप्रवाह मैपिंग कहता है कि DataPartId प्राथमिक कुंजी है। क्या आपके पास अतिरिक्त प्राथमिक कुंजी धाराप्रवाह मैपिंग है? यदि नहीं, तो आपकी मैपिंग गलत हो सकती है। क्या आपने यह देखने के लिए उत्पन्न वास्तविक डेटाबेस की जांच की है कि क्या डेटा मॉडल आप जो करने की कोशिश कर रहा है उससे मेल खाता है या नहीं?

मेरा अनुमान है कि आपकी स्थिति मैसेज और एल्बम कक्षाओं में टिप्पणी करने के लिए नेविगेशन गुण हैं, लेकिन चूंकि आपने केवल अपनी प्राथमिक कुंजी के रूप में डेटापार्ट आईडी को परिभाषित किया है, यही वह टिप्पणी है जिसका उपयोग टिप्पणियों को देखने के लिए किया जा रहा है, टिप्पणी नहीं।

+0

हाँ, किसी ने कॉन्फ़िगरेशन में विदेशी कुंजी को सही तरीके से तारों के बिना नेविगेशन गुण जोड़े। मुझे अभी नहीं पता था कि त्रुटि की व्याख्या कैसे करें। मदद की सराहना करें। – tmesser

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