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

相关问题