2013-01-01 30 views
5

varlık çerçevesinde çalışmıyor sınıf alanım projesinde (poco?):Geç yükleme Ben tanımladık 5

public class Club 
{ 
    public Club() 
    { 
     ContactPersons = new HashSet<ContactPerson>(); 
    } 

    public int Id { get; set; } 

    [Required] 
    [StringLength(64)] 
    public string Name { get; set; } 

    public virtual ICollection<ContactPerson> ContactPersons { get; set; } 
} 

public class ContactPerson 
{ 
    public virtual int Id { get; set; } 

    [StringLength(64)] 
    public virtual string FirstName { get; set; } 

    [StringLength(64)] 
    public virtual string LastName { get; set; } 
} 

benim MVC projede benim clubcontroller var: Son olarak

public ActionResult Create(CreateClubViewModel model) 
    { 
     Club club = new Club(); 
     model.Initialize(club); 
     IClubDb clubDb = DependencyResolverHelper.IClubDbService; 
     clubDb.Create(club); // create club in db 
    } 

    public ActionResult Display(string domain) 
    { 
     try 
     { 
      IClubDb clubDb = DependencyResolverHelper.IClubDbService; 
      Club club = clubDb.Get(domain); 
      return View(club); 
     } 
     catch (Exception) // user is not logged iin 
     { 
      return View(); 
     } 
    } 

Ben tembel yüke m ContactPersons EF almak için her şeyi denedim

public Club Get(string name) 
{ 
    return DataContext.Clubs 
    //.Include(x => x.ContactPersons) 
    .Single(r => r.Name == name); 
} 

public int Create(Club club) 
{ 
     DataContext.Clubs.Add(club); 
     return DataContext.SaveChanges(); 
} 

, benim DB projede ben oluşturmak ve kulüp almak y kulübü nesnesini Görüntüleme yönteminde Get club'ı çağırdığımda ancak ContactPersons'un her zaman sıfır uzunluğu vardır. Bununla birlikte, eğer .include'u kullanarak (bu kısmı yorumladım) yüklenen kişilerle ilgilenirseniz, o zaman ContactPersons'un birtakım kontakları vardır.

ben yanlış yapıyorum emin neyim:

  • bir kamu parametre daha az kurucuya sahip http://msdn.microsoft.com/en-us/library/dd468057.aspx
  • (ancak yapıcı korumalı değil):

    1. Ben poco sınıfları tanımlamak için kuralları izlediğinizi Ben LazyLoading

    Ben benim bir kavram eksik düşünüyorum etkin olmalı, poco kulüp sınıf I veritabanına eklemek alanım varlık aynı zamanda. Neyi yanlış yapıyorum? Ne yapmam için tembel yükleme yapamıyorum?

  • +0

    '' Ilgili 'yerine bir' List 'kullanmayı deneyin. Bence EF, ICollection'ın –

    +0

    Dominic'i kullanacak kadar akıllı olduğunu düşünmüyor, sadece öneriyi denedim, hala aynı, ContactPersons boş :( – user1780105

    +0

    @Dominic: 'ICollection ', oldukça iyi çalışıyor. 'bir siparişe işaret eder ve ilgili varlıklar belirli bir sırayla iade edilmez. –

    cevap

    0

    LazyLoading'iniz dbContext'iniz kapalıyken gerçekleşiyor gibi görünüyor. Yani yüklenmeyecek. ContactPerson'i kullanıyorsunuz, değil mi?

    +0

    Evet, Kulübün View (club) ekran yöntemine erişiyorum. Ama ben irtibat kişisine "return view (club") satırından önce erişmeyi denedim ve aynıydı. Ben de, DB projesinde kulüp aldığımda ve yüklenmediğinde, irtibat kişisine erişmeye çalıştım. – user1780105

    +0

    Hata ayıklayıcısını kullandığımda, ContactPerson türü değişmez. EF'nin yeni bir tip oluşturduğunu ve alıcı erişim fonksiyonuna bir kanca eklediğini belirsiz hatırlıyorum. EF'in vekil nesneler yaratmadığı, dolayısıyla tembel yüklemenin başarısız olduğu görülmektedir. Kodumda aşağıdaki satırlarım var: this.Configuration.LazyLoadingEnabled = true; this.Configuration.ProxyCreationEnabled = true; – user1780105

    0

    Yabancı anahtarın varlığınıza dahil edilmesini mi unuttunuz?

    public class ContactPerson 
    { 
        public virtual int Id { get; set; } 
    
        [StringLength(64)] 
        public virtual string FirstName { get; set; } 
    
        [StringLength(64)] 
        public virtual string LastName { get; set; } 
    
        public int ClubId { get; set; } 
        [ForeignKey("ClubId")] 
        public virtual Club Club { get; set; } // if you need 
    } 
    
    1

    Belki bu iki bağlantılara Tembel Yüklüyor açıklamalar bulabilirsiniz:

    bu tembel yükleme kullanarak örneğini göstermektedir http://social.msdn.microsoft.com/Forums/en-US/2fa08c8f-b8c4-475f-8834-d6c903463ede/disable-lazy-loading-for-navigation-properties-on-entities-in-ef-5

    virtual anahtar kelime ile tembel yükleme nasıl ayarlanacağını gösterir http://blog.staticvoid.co.nz/2012/7/17/entity_framework-navigation_property_basics_with_code_first

    +0

    1 downvote, çünkü ilk bağlantınız microsoft belgelerine bir link. başka bir downvote çünkü ikinci bağlantınız tembel yükleme hakkında hiçbir şey göstermiyor – user275801

    İlgili konular