2012-11-02 13 views
6

2 सरल वर्गों है।इकाई की रूपरेखा नेविगेशन संपत्ति अशक्त

जब मैंने इसे एक virtual तो यह कहेंगे बनाने: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

मैं अपने Settings सूची कैसे उपयोग कर सकते हैं?

दूसरी तरह के आसपास काम करता है, अगर मैं डेटाबेस SettingCategory संपत्ति भर जाता है से एक Setting पुनः प्राप्त।

यह मेरा प्रारंभिक कोड-माइग्रेशन स्क्रिप्ट है:

CreateTable(
    "dbo.Settings", 
    c => new 
     { 
      SettingId = c.Guid(nullable: false, identity: true), 
      Name = c.String(nullable: false), 
      Value = c.String(), 
      SettingCategory_SettingCategoryId = c.Guid(nullable: false), 
     }) 
    .PrimaryKey(t => t.SettingId) 
    .ForeignKey("dbo.SettingCategories", t => t.SettingCategory_SettingCategoryId, cascadeDelete: true) 
    .Index(t => t.SettingCategory_SettingCategoryId); 

CreateTable(
    "dbo.SettingCategories", 
    c => new 
     { 
      SettingCategoryId = c.Guid(nullable: false, identity: true), 
      Value = c.String(nullable: false), 
     }) 
    .PrimaryKey(t => t.SettingCategoryId); 

और यह हिस्सा है कि यह डेटाबेस से हो जाता है है:

public SettingCategory Get(Guid settingCategoryId) 
{ 
    using (var context = new BackofficeContext()) 
    { 
     return context 
      .SettingCategories 
      .FirstOrDefault(s => s.SettingCategoryId == settingCategoryId); 
    } 
} 

उत्तर

मैं भूल को शामिल .SettingCategories में, लेकिन मैं इसे लैम्ब्डा के साथ कोशिश कर रहा था:

public SettingCategory Get(Guid settingCategoryId) 
{ 
    using (var context = new BackofficeContext()) 
    { 
     return context 
      .SettingCategories 
      .Include(s => s.Settings) 
      .FirstOrDefault(s => s.SettingCategoryId == settingCategoryId); 
    } 
} 

कि काम नहीं करता है, लेकिन यह करता है:

public SettingCategory Get(Guid settingCategoryId) 
{ 
    using (var context = new BackofficeContext()) 
    { 
     return context 
      .SettingCategories 
      .Include("Settings") 
      .FirstOrDefault(s => s.SettingCategoryId == settingCategoryId); 
    } 
} 
+0

यह अजीब बात है। क्या आप यह दिखा सकते हैं कि आप SettingCategory को कैसे पुनर्प्राप्त कर रहे हैं? – Anri

+0

क्या आप वाकई अपने डेटाबेस में सेटिंग्स से संबंधित हैं? – Anri

+0

मैं पहले माइग्रेशन के साथ कोड का उपयोग कर रहा हूं, इसलिए इसे सब ठीक करना चाहिए? मैंने अपनी प्रारंभिक लिपि जोड़ दी। – YesMan85

उत्तर

16

क्योंकि आप के निपटान कर रहे हैं अपने BackofficeContext आप LazyLoading है, जो है, जब आप Settings आभासी बनाने के क्या हो रहा है का उपयोग नहीं कर सकते हैं।

आप या तो अपने BackofficeContext, या उत्सुक लोड Settings के जीवनकाल को बढ़ा सकते हैं। आप Include के साथ उत्सुक लोडिंग का उपयोग कर सकते हैं।

public SettingCategory Get(Guid settingCategoryId) 
{ 
    using (var context = new BackofficeContext()) 
    { 
     return context 
      .SettingCategories 
      .Include(s => s.Settings) 
      .FirstOrDefault(s => s.SettingCategoryId == settingCategoryId); 
    } 
} 
+0

मैंने कोशिश की, लेकिन समस्या यह है कि 's.Settings' एक मान्यता प्राप्त अभिव्यक्ति नहीं है! 'प्रतीक' सेटिंग्स को हल नहीं कर सकता 'यही कारण है कि मैं अपने सिर को खरोंच कर रहा हूं। – YesMan85

+0

मैंने अभी यह कोशिश की: 'शामिल करें (" सेटिंग्स ") 'और यह काम करता है कि अजीब बात यह है कि लैम्ब्डा काम नहीं कर रहा है। – YesMan85

+11

क्या आपने System.Data.Entity में एक संदर्भ (उपयोग) जोड़ा है? रिफैक्टरिंग करते समय दृढ़ता से टाइप किए गए शामिल की अत्यधिक अनुशंसा की जाती है। – Martin4ndersen