2015-03-26 6 views
5

मैं दो मॉडल 1)क्यों ईएफ नेविगेशन संपत्ति वापस शून्य?

public class Indicator 
{ 
    public long ID { get; set; } 
    public string Name { get; set; } 
    public int MaxPoint { get; set; } 
    public string Comment { get; set; } 
    public DateTime DateChanged { get; set; } 
    public DateTime DateCreated { get; set; } 

    public virtual IList<CalculationType> CalculationTypes { get; set; } 
    public virtual IList<TestEntity> TestEntitys { get; set; } 
    public virtual IndicatorGroup IndicatorGroup { get; set; } 
} 

2)

public class CalculationType 
{ 
    public long ID { get; set; } 
    public string UnitName { get; set; } 
    public int Point { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateChanged { get; set; } 

    public virtual Indicator Indicator { get; set; } 
    public virtual IList<Сalculation> Calculations { get; set; } 
} 

मैं इस कोड नेविगेशन संपत्ति CalculationTypes पर

var indicator = DataContext.Indicators.FirstOrDefault(i => i.ID == indicatorID); 
var test = DataContext.CalculationTypes.FirstOrDefault(); 

पहली पंक्ति वापसी अशक्त को क्रियान्वित करने enter image description here

दूसरी लाइन खाली संग्रह वापसी। enter image description here क्यों?

अद्यतन स्नैपशॉट डेटाबेस enter image description hereenter image description here परियोजना लिंक https://github.com/wkololo4ever/Stankin

गणना

public class Сalculation 
{ 
    public long ID { get; set; } 

    public virtual CalculationType CalculationType { get; set; } 
    public virtual ApplicationUser Creator { get; set; } 
} 
+0

क्या आपने आलसी लोडिंग को अक्षम कर दिया है? –

+0

@FarhadJabiyev LazyLoading सक्षम – kriper

+0

मैं अपनी मैपिंग पोस्टिंग लगता – jbl

उत्तर

2

1) लेज़ी लोड करना सक्षम है जोड़ा? यदि नहीं, तो आपको 'शामिल' सिंटैक्स के साथ अपने नेविगेशन गुणों को स्पष्ट रूप से लोड करने की आवश्यकता है।

2) क्या आप वाकई उस संबंध को पहचानने में सक्षम होना चाहिए? क्या आपने कोड फर्स्ट या डाटाबेस फर्स्ट का उपयोग किया था?

संपादित करें: 3) क्या आप सुनिश्चित हैं कि आपके डेटाबेस में डेटा है और इंडिकेटर से इंडिकेटर समूह की विदेशी कुंजी उस विशिष्ट रिकॉर्ड के लिए एक मान है? मैं यह कह रहा हूं क्योंकि यदि कोई डेटा नहीं है तो मान "शून्य" मान्य है।

पीएस यदि आपको "इंडिकेटर समूह समूह" नामक संकेतक पर एक विदेशी कुंजी नहीं दिखाई देती है, तो "इंडिकेटर समूह" तालिका पर "संकेतक आईडी" हो सकता है, इस मामले में - आपके द्वारा प्रदान किए गए नामों से जा रहा है - आपका डेटाबेस गलत कॉन्फ़िगर किया गया है और आपको उपयोग करने की आवश्यकता होगी विदेशी कुंजी बनाने के तरीके पर ईएफ को निर्देश देने के लिए धाराप्रवाह वाक्यविन्यास या डेटा विशेषताओं।

+0

1) आलसी लोडिंग सक्षम। 2) मैं पहले कोड का उपयोग करता हूं। – kriper

+0

3) मैं अपनी पोस्ट में स्नैपशॉट डेटाबेस डेटा जोड़ता हूं। – kriper

2

इस प्रयास करें:

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

DbContext.Configuration.ProxyCreationEnabled गलत पर सेट है, तो DbContext बच्चे कुछ पैरेंट ऑब्जेक्ट के लिए वस्तुओं जब तक शामिल विधि पैरेंट ऑब्जेक्ट पर कहा जाता है लोड नहीं होगा। DbContext.Configuration.LazyLoading को सेट करना सही या गलत पर सक्षम होगा इसके व्यवहार पर कोई प्रभाव नहीं पड़ेगा।

यदि DbContext.Configuration.ProxyCreationEnabled सत्य पर सेट किया गया है, तो बाल ऑब्जेक्ट्स स्वचालित रूप से लोड हो जाएंगे, और DbContext.Configuration.LazyLoadingEnabled मान तब नियंत्रित होगा जब बच्चे ऑब्जेक्ट लोड हो जाएंगे।

मुझे लगता है कि इस समस्या है:

संपादित करें: 3) यदि आप सुनिश्चित करें कि आपके डेटाबेस में और IndicatorGroup लिए संकेतक से विदेशी कुंजी है कि विशिष्ट रिकार्ड के लिए एक मूल्य है कि डेटा है? मैं यह कह रहा हूं क्योंकि पर मूल्य "शून्य" मान्य है, वहां कोई डेटा नहीं है।

पीएसयदि आपको "इंडिकेटर ग्रुपआईडी" नामक संकेतक पर एक विदेशी कुंजी नहीं दिखाई देती है, तो तालिका "इंडिकेटर समूह" पर "संकेतक आईडी" हो सकता है, इस मामले में - आपके द्वारा प्रदान किए गए नामों से जा रहा है - आपका डेटाबेस गलत कॉन्फ़िगर किया गया है और आप धाराप्रवाह वाक्यविन्यास या विदेशी कुंजी बनाने के तरीके पर ईएफ को निर्देश देने के लिए डेटा विशेषताओं का उपयोग करने की आवश्यकता है।

इस पर प्रयास करें और सुनिश्चित करें कि विदेशी कुंजी को सही किया गया है।

public class CalculationType 
{ 
    public long ID { get; set; } 
    public string UnitName { get; set; } 
    public int Point { get; set; } 
    public DateTime DateCreated { get; set; } 
    public DateTime DateChanged { get; set; } 
    [ForeignKey("IndicatorID")] 
    public string IndicatorId { get; set; } //this is the foreign key, i saw in your database is: Indicator_ID, avoid this, rename it to IndicatorID or IndicatorId 

    public virtual Indicator Indicator { get; set; } 
    public virtual IList<Сalculation> Calculations { get; set; } 
} 
+0

इस संपत्ति का सभी सक्षम। – kriper

+0

मैंने दूसरी तस्वीरों को देखा, यह खाली सूची लौटा, क्या आपके पास डेटा है? –

+0

मेरे पास इसके लिए डेटा नहीं था। जब मेरे पास डेटा होता है, तो वे तुरंत लोड हो जाते हैं। मुझे समझ में नहीं आ रहा है क्यों आलसी लोडिंग काम करते हैं। – kriper

1

एक ही व्यवहार है, लेकिन चयनित जवाब की तुलना में अलग मूल कारण:

नेविगेशन संपत्ति भी अशक्त अगर आप myContext.Configuration.AutoDetectChangesEnabled

बहुत स्पष्ट बंद कर दिया है, लेकिन यह मेरे हो गया, जब मैं कुछ प्रदर्शन को लागू किया गया था हो सकता है improvments।

+0

काम करता है यह कम से कम मेरे कुछ मुद्दों को हल करता है। अनुमान लगाना, व्यवहार कुछ मल्टीथ्रेडिंग परिदृश्यों में भी हो सकता है। – LuckyLikey

0

इसे देखें: Navigation Property With Code First। यह उल्लेख करता है कि नेविगेशन संपत्ति शून्य क्यों है और इसका समाधान क्यों है।

डिफ़ॉल्ट रूप से, नेविगेशन गुण शून्य हैं, वे डिफ़ॉल्ट रूप से लोड नहीं होते हैं। नेविगेशन प्रॉपर्टी लोड करने के लिए, हम IQuearable के "शामिल" विधि का उपयोग करते हैं और इस प्रकार की लोडिंग को उत्सुक लोडिंग कहा जाता है।

उत्सुक लोडिंग: यह एक प्रक्रिया है जिसके द्वारा एक प्रकार की इकाई क्वेरी के एक हिस्से के रूप में संबंधित इकाइयों को लोड करती है और इसे IQueryable के "शामिल" विधि द्वारा प्राप्त किया जाता है।

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