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
,如果希望唯一性,最好在数据库级别定义此项。