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 => c.SiteUsers)が含まdoesntのサイトを照会。

+0

はそれに何か問題ではないようです。実行されたSQLをチェックしてください。それには結合が含まれていますか? –

+0

あなたのコレクションのSiteUsersとRolesがクラス定義内にあるべきではないですか?これはちょうどタイプミスですか、これがあなたの問題の原因ですか? –

+0

はいそれはただのタイプミスです –

答えて

0

あなたは役割が含まれていませんでした:

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

私はすでにこれを試しましたが、私はうまくいきません。 –

+0

一般的な指示に従うことをお勧めします。プライマリキー列(Id)と外部Id列( 'public SiteUser SiteUser {get; set;}'とおそらくint SiteUserId)を追加します。私は使用するコレクション(Hashset)を定義することができるとは思わなかった。ですから、ICollection で 'protected set'から' protected'を削除する必要があります。一意性が必要な場合は、これをデータベースレベルで定義する方が良いでしょう。 – noox

関連する問題