Entity framework 在EF7中加载实体

Entity framework 在EF7中加载实体,entity-framework,entity-framework-core,Entity Framework,Entity Framework Core,我有一个集合中包含集合的实体。我在加载收藏内容时遇到问题 // Site public class Site{ protected Site() { SiteUsers = new HashSet<SiteUser>(); } public virtual ICollection<SiteUser> SiteUsers { get; set; } } // Site User public

我有一个集合中包含集合的实体。我在加载收藏内容时遇到问题

// 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);            
    }
//站点
公共类网站{
受保护站点()
{           
SiteUsers=new HashSet();
}    
公共虚拟ICollection站点用户{get;set;}
}
//网站用户
公共类站点用户
{
受保护的SiteUser()
{
Roles=newhashset();
}
公共虚拟ICollection角色{get;protected set;}
}
//SiteUserRole
公共类SiteUserRole
{
受保护的SiteUserRole()
{
}
私有SiteUserRole(Guid id,SiteRoleEnum角色)
{
Id=Id;
角色=角色;
DateCreated=DateTimeOffset.UtcNow;
}
公共Guid Id{get;set;}
公共SiteRoleEnum角色{get;set;}
public DateTimeOffset DateCreated{get;set;}
公共静态SiteUserRole创建(Guid id,SiteRoleEnum角色)
{
返回新的SiteUserRole(id,role);
}
}
//我把它放在DbContext上
模型创建时受保护的覆盖无效(ModelBuilder ModelBuilder)
{
modelBuilder.Entity().HasMany(r=>r.SiteUsers);
}
当我查询站点时,它不包含siteuser的角色
返回_context.Sites.Include(c=>c.SiteUsers)

您没有包括以下角色:

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

看起来没什么问题。检查执行的SQL。它是否包含联接?SiteUsers和角色的集合不应该在类定义中吗?这仅仅是一个打字错误,还是这是你问题的原因?我建议你按照一般说明去做。我将添加主键列(Id)和外部Id列(
publicsiteuser-SiteUser{get;set;}
以及int-SiteUserId)。我还没有看到您可以定义要使用的集合(Hashset)。因此,您可能应该从
ICollection
protected set
中删除此项和
protected
,如果希望唯一性,最好在数据库级别定义此项。