2016-06-27 9 views
13

Bir sorgu gerçekleştirirken eklemek istediğim üç Model var.Varlık Framework Core Eager Yükleme Ardından koleksiyona dahil

İşte senaryo.

public class Sale 
{ 
    public int Id { get; set; } 
    public List<SaleNote> SaleNotes { get; set; } 
} 

public class SaleNote 
{ 
    public int Id { get; set; } 
    public User User { get; set; } 
} 

public class User 
{ 
    public int Id { get; set; } 
} 

elimden istekli yük böyle SaleNotes ...

_dbContext.Sale.Include(s => s.SaleNotes); 

bir koleksiyon Ancak, ThenInclude kullanarak SaleNote gelen istekli yüke Kullanıcı modelini çalışıyor zordur . Bu senaryoyu nasıl yükleyeceğine dair herhangi bir örnek bulamıyorum. Birisi, koddaki kaynağı tedarik edebilmek için Kullanıcıyı yüklemek için aşağıdaki ThenInclude'a gider.

_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(...); 

cevap

19

O SaleNotes toplama navigasyon özelliği olduğunu fark etmez. Bu referanslar ve koleksiyonları için aynı çalışması gerekir: son Referans için

_dbContext.Sale.Include(s => s.SaleNotes.Select(sn=>sn.User)); 
+13

Cevabınız için teşekkür ederiz. Ben aslında Kullanıcı intellisense içinde görünmüyor olmasına rağmen, sn.User ekledim, benim çözüm inşa ve o koştu! Intellisense bir koleksiyon olarak SaleNotes "sn" lambda ifadesi olarak davranıyordu, bu yüzden Kullanıcı sınıfının bireysel özelliklerini göstermiyordu. –

+0

rica ederim. Yardım edebildiğime sevindim;) – octavioccl

+3

@AllenRufolo, size bir liste (ikincisi) veren bir liste olan bir tane (yani birinci liste ve varsayılan liste) sunan iki aşırı yüklenme var. intellisense'de sadece "aşağı ok" yaparsınız, beklenen intellisense seçeneklerini göreceksiniz. Ben de aynı karışıklık vardı :-) – gzak

2

:

_dbContext.Sale.Include(s => s.SaleNotes).ThenInclude(sn=>sn.User); 

Ama bildiğim, EF7 da eski çok katlı Seç uzatma yöntemi kullanılarak sözdizimi dahil destekler EF Çekirdek (1.1.0) sürümü de bu senaryo için açık yüklemeyi desteklemektedir. Böyle bir şey ...

using (var _dbContext = new DbContext()) 
{ 
    var sale = _dbcontext.Sale 
     .Single(s => s.Id == 1); 

    _dbcontext.Entry(sale) 
     .Collection(n => n.SalesNotes) 
     .Load(); 

    _dbcontext.Entry(sale) 
     .Reference(u => u.User) 
     .Load(); 
}