2016-04-18 4 views
0

У меня есть сущность с коллекцией внутри коллекции. У меня возникла проблема с загрузкой содержимого коллекции.загрузка объектов в EF7

// Site 
public class Site{ 
    protected Site() 
    {   
     SiteUsers = new HashSet<SiteUser>(); 
    }  
    public virtual ICollection<SiteUser> SiteUsers { get; set; } 
} 

// Site User 
public class SiteUser 
{ 
    protected SiteUser() 
    { 
     Roles = new HashSet<SiteUserRole>(); 
    } 
    public virtual ICollection<SiteUserRole> Roles { get; protected set; } 

} 


// SiteUserRole 

public class SiteUserRole 
{ 
    protected SiteUserRole() 
    { 
    } 

    private SiteUserRole(Guid id, SiteRoleEnum role) 
    { 
     Id = id; 
     Role = role; 
     DateCreated = DateTimeOffset.UtcNow; 
    } 

    public Guid Id { get; set; } 
    public SiteRoleEnum Role { get; set; } 
    public DateTimeOffset DateCreated { get; set; } 

    public static SiteUserRole Create(Guid id, SiteRoleEnum role) 
    { 
     return new SiteUserRole(id, role); 
    } 

} 


//I put this on DbContext 
protected override void OnModelCreating(ModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Site>().HasMany(r => r.SiteUsers);    
    } 

Когда я запрос к сайту оно не»включает в себя роли siteuser возвращения _context.Sites.Include (с => c.SiteUsers);

+0

Не похоже, что ничего плохого с ним. Проверьте выполненный SQL. Содержит ли это соединение? –

+0

не должны ли ваши коллекции SiteUsers и Roles внутри определений классов? Это просто опечатка или это причина вашей проблемы? –

+0

да это просто опечатка –

ответ

0

Вы не включили роли:

context.Sites.Include(c => c.SiteUsers).ThenInclude(su => su.Roles); 
+0

Я уже пробовал это, но я не работаю. –

+0

Я предлагаю следовать общим инструкциям. Я бы добавил столбцы первичного ключа (Id) и столбцы с иностранным идентификатором ('public SiteUser SiteUser {get; set;}' и, возможно, int SiteUserId). Я не видел, что вы можете определить коллекцию для использования (Hashset). Поэтому, возможно, вам следует удалить это и «protected» из 'protected set' в' ICollection 'Если вы хотите уникальности, лучше определить это на уровне базы данных. – noox

Смежные вопросы