2012-11-02 16 views
6
boş

olduğunu.Varlık çerçeve navigasyon özelliği Ben 2 basit sınıfları

Ben bir virtual o zaman diyecekler olun: The ObjectContext instance has been disposed and can no longer be used for operations that require a connection.

nasıl Settings listesine erişebilirsiniz?

Diğer bir yöntem ise, çalışma ortamından Setting veritabanından SettingCategory özelliği doldurulursa doldurulur.

Bu benim ilk kod-göçler betik:

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); 

Ve bu veritabanından alır parçasıdır:

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

Cevap

Ben include unuttum .SettingCategories, ancak bir lambda ile çalışıyordum:

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

ancak bunu yapar:

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

Bu garip. SettingCategory'i nasıl aldığınızı gösterir misiniz? – Anri

+0

Veritabanınızdaki ilgili ayarların olduğundan emin misiniz? – Anri

+0

İlk olarak geçişleri kodlarla kullanıyorum, bu yüzden her şeyi doğru yapmalı mı? İlk komutumu ekledim. – YesMan85

cevap

16

sen bertaraf Çünkü senin BackofficeContext sen Settings sanal hale durumlarda neler olduğunu ise LazyLoading, kullanamaz.

BackofficeContext ya da hevesli yük Settings'un ömrünü uzatabilirsiniz. Include ile istekli yükleme kullanabilirsiniz.

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

Bunu denedim, ama sorun şu ki 's.Settings' tanınmış bir ifade değil! 'Sembol' sembolü çözülemiyor 'Bu yüzden kafamı çiziyorum. – YesMan85

+0

Şimdi bunu denedim: '.Include (" Ayarlar ")' ve bu lambda çalışmayan garip çalıştı. – YesMan85

+11

System.Data.Entity'ye bir başvuru (kullanıyor) eklediniz mi? Refactoring yaparken, güçlü yazılan Include önerilir. – Martin4ndersen

İlgili konular