0

我在我沒有做的數據庫中有一對一的關係。我創建了的DbContext和實體EF 6.1.3:一對一對多EF 6.1.3得到第一個'一個'關係中很多的計數懶加載

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的Ç集(一至一個與A)中,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 

我應該如何構建與數據註釋或FluentApi的關係以獲得從A到Cs的惰性加載?

+0

首先要永遠是:檢查執行的SQL。 –

回答

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

相關問題