0

をロードしました。 I DbContextとEF 6.1.3のためのエンティティ作成しました:私はAを取得すると一つは、私はしなかった、データベース内の1対1対多の関係を持っている

public class A{ 
    public int Id { get; set; } 
    public virtual B B { get; set; } 
} 

public class B{ 
    public int Id { get; set; } 
    public int AId { get; set; } 
    public virtual A A { get; set; } 
    public virtual ICollection<C> Cs { get; set; } 
} 

public class C{ 
    public int Id { get; set; } 
    public int BId { get; set; } 
    public virtual B B { get; set; } 
} 

public class MyDb : DbContext { 
    public DbSet<A> As { get; set; } 
    public DbSet<B> Bs { get; set; } 
    public DbSet<C> Cs { get; set; } 
} 

を:

var a = MyDb.As.FirstOrDefault(); 

をおよび関連BのCコレクションに回数を行う(1へA)と1、Csのコレクションが空である:

var countCs = a.B.Cs.Count; // This is 0 

私が行うとき、中:

var b = MyDb.Bs.FirstOrDefault(b => b.AId == a.Id); 
var countCs = b.Cs.Count; // This is the correct value 
私はCsにから作業遅延読み込みを取得するために、データannotiationsまたはFluentApiとの関係を構築する必要がありますどのように

?実行されたSQLをチェックしてください。

+0

最初のものは、常にしてみてください。 –

答えて

1

にこの

public class A 
{ 
    public int AId { get; set; } 
    public virtual B B { get; set; } 
} 

public class B 
{ 
    public int AId { get; set; } 
    public virtual A A { get; set; } 
    public virtual ICollection<C> Cs { get; set; } 
} 

public class C 
{ 
    public int Id { get; set; } 
    public int BId { get; set; } 
    public virtual B B { get; set; } 
} 
public class MyDb : DbContext 
    { 
     public DbSet<A> As { get; set; } 
     public DbSet<B> Bs { get; set; } 
     public DbSet<C> Cs { get; set; } 
     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Entity<B>() 
       .HasKey(p => p.AId); 
      modelBuilder.Entity<A>() 
       .HasOptional(p => p.B) 
       .WithRequired(p => p.A); 
      modelBuilder.Entity<C>() 
       .HasRequired(p => p.B) 
       .WithMany(p => p.Cs) 
       .HasForeignKey(p => p.BId); 
     } 
    } 
+0

お返事ありがとうございます。これを私のDbContextに追加しました。それでもカウントは0を返します。他のアイデアは? – AppSum

関連する問題