2016-06-24 4 views
2

Issue #1368Docs Hereに記載されている多対多の回避策の手順はありますが、移動しようとすると常にnullを返します。エンティティフレームワークコア(EF 7)の多対多の結果は常にNULL

マイモデル:

public class Organization 
{ 
    public Guid OrganizationID { get; set; } 

    //... 

    public ICollection<OrganizationSubscriptionPlan> OrganizationSubscriptionPlans { get; set; } 

} 

public class SubscriptionPlan 
{ 
    public int SubscriptionPlanID { get; set; } 

    //... 

    public ICollection<OrganizationSubscriptionPlan> OrganizationSubscriptionPlans { get; set; } 


public class OrganizationSubscriptionPlan 
{ 
    [ForeignKey("Organization")] 
    public Guid OrganizationID { get; set; } 
    public Organization Organization { get; set; } 

    [ForeignKey("SubscriptionPlan")] 
    public int SubscriptionPlanID { get; set; } 
    public SubscriptionPlan SubscriptionPlan { get; set; } 
} 

ApplicationDbContext:

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    base.OnModelCreating(builder); 
    builder.Entity<OrganizationSubscriptionPlan>().HasKey(x => new { x.OrganizationID, x.SubscriptionPlanID }); 
    builder.Entity<OrganizationSubscriptionPlan>().HasOne(x => x.Organization).WithMany(x => x.OrganizationSubscriptionPlans).HasForeignKey(x => x.OrganizationID); 
    builder.Entity<OrganizationSubscriptionPlan>().HasOne(x => x.SubscriptionPlan).WithMany(x => x.OrganizationSubscriptionPlans).HasForeignKey(x => x.SubscriptionPlanID); 
} 

そして、私のクエリ:

var organizations = _context.Organizations 
    .Include(o => o.OrganizationSubscriptionPlans); 

foreach (var organization in organizations) 
{ 
    //.... 
    var subscriptions = organization.OrganizationSubscriptionPlans 
      .Select(s => s.SubscriptionPlan); 
    // ^^^^^^^^^^^ why is subscriptions always null? 
} 

"組織" のクエリがOrganizationSubscriptionPlansのリストを含む、期待通りの結果を返します。それぞれの中で、私はforeachのlooでそれらに移動しようとするときp「サブスクリプション」クエリは毎回nullを返します。私は間違って何をしていますか?

答えて

3

これは、レイジーローディングの問題です。参加エンティティを「含む」し、次に他のエンティティを「ThenInclude」しなければなりません。

var organizations = _context.Organizations 
    .Include(o => o.OrganizationSubscriptionPlans) 
    .ThenInclude(s => s.SubscriptionPlan); 
0

ForeignKey attrは、参照プロパティを修飾して、どの基本プロパティがFK値を保持しているかを示します。

public class OrganizationSubscriptionPlan 
{  
    public Guid OrganizationID { get; set; } 
    [ForeignKey("OrganizationID")] 
    public Organization Organization { get; set; } 

    public int SubscriptionPlanID { get; set; } 
    [ForeignKey("SubscriptionPlanID")] 
    public SubscriptionPlan SubscriptionPlan { get; set; } 
} 
+0

ありがとうございますが、問題は解決していないようです。 「サブスクリプション」クエリではnullの結果が得られます。 –

関連する問題